2012-01-26 6 views
4

私は、必要な最新の投稿を動的に取得するために、非表示の入力タグに格納された独自のIDを持つユーザーがコメントを残しているページがあります。すべての投稿のIDを把握して文字列に配置すると、各IDはコンマで区切る必要があります。同じクラス要素をすべて選択して文字列に格納する

例えば

...

HTMLマークアップ

<div class='msgPost'><div class='msgContainer'> 
    <input class='activityId' type='hidden' value='579'> 
    <span> 
     <div class='name'>Bob</div>nm 
    </span> 
</div> 

<div class='msgPost'><div class='msgContainer'> 
    <input class='activityId' type='hidden' value='578'> 
    <span> 
     <div class='name'>Tom</div>4 
    </span> 
</div> 

<div class='msgPost'><div class='msgContainer'> 
    <input class='activityId' type='hidden' value='577'> 
    <span> 
     <div class='name'>John</div>123 
    </span> 
</div> 

jQueryのコード

function getLatestActivities(){ 
    var ignoreMessagesColl = $("input.activityId").val(); 

    $.ajax({ 
     traditional: true, 
     dataType: "json", 
     type: "GET", url: "include/process.php", 

     data:{ 
     getLatestActivity: "true", 
     toUser: "4", 
     ignoreMessages: ignoreMessagesColl 
     }, 

     success: function(data){ 
     $.each(data, function (i, elem) { 
      $('.commentMessage').after(elem.value); 
     });    
     } 
    }); 
} 

可変ignoreMessagesCollのみのファーストクラスのインスタンスを見つけ瞬間.activityid値 "579" を持っている、しかし、私は実際にignoreMessageCollは "579、578、577"

答えて

12

valだけmapプラスgetプラスjoinを試してみてください、最初の1の値を返す値を持っている必要があります。

var ignoreMessagesColl = $("input.activityId").map(function() { 
     return this.value; 
    }).get().join(","); 

何それはない:

  1. mapは、マッチした要素のすべてをループし、どのようなイテレータ関数リターンのjQueryのラップ配列を構築します。

  2. getは、jQueryラッパーから基本配列を取得します(なぜmapがjQueryラッパーを返すかわかりません)。

  3. joinは、配列の要素を指定された区切り文字で区切られた文字列に結合します。

あなたの例のデータのための最終的な結果はignoreMessagesColl"579,578,577"を持っているということです。

+0

おかげで、これはとてもうまくいきました。 –

2
var values = [];  

$('.msgContainer input.activityId').each(function(){ 

    values.push($(this).val()); 
}); 

console.log(values); 
+0

しかし、配列が返され、目的のカンマ区切り文字列ではない他の人のおかげで –

+0

私はあなたの答えを高く評価しましたが、私は文字列に行くと述べたようにclaarman。 –

1
var ignoreMessagesCol = $("input.activityId").map(function() { 
    return $(this).val(); 
}).get().join(", "); 

.MAP()セレクタ内のすべての要素に対して内側匿名関数を実行し、jQueryオブジェクトのコレクションを返します。 .get()は配列にします。 .join()があなたが持っている必要があり、それカンマ区切りの文字列

2

ようになります:

var arr = [], str; 
$("input.activityId").each(function(){ 
    arr.push(this.value); 
}); 
str = arr.join(','); 
関連する問題