2012-02-04 8 views
0

jQueryの.each()関数を使って配列を設定しようとしていますが、正しく実行していないようですね。私は、さまざまなアラートをしようとするときjQuery .each()関数を使用して配列を設定しますか?

<div class="cheers" data-fname = "fname" data-lname="lname">some ish..</div><!-- going through a while loop!--> 

は、その後、私は、その後、この

var arrayMe = []; 
$(".cheers").each(function(index){ 
    arrayMe[index] = $(".cheers").attr('data-fname')+","+$(".cheers").attr('data-lname'); 
}); 

のような何かをjqueryの機能を持っています:

は私のようなHTMLの属性を持っています

alert(arrayMe); //this gives me the fname,lname 
alert(arrayMe[0]); //this gives me the first fname,lname in the array 
alert(arrayMe[0][1]); //this SUPPOSED to give me the first lname, but it gives me a letter... 

答えて

6

arrayMe[0][1]の代わりにarrayMe[1]を使用する必要があります。

arrayMe[0]は文字列で、arrayMe[0][1]は文字列を取得します。arrayMe[0][1]は、指定された文字列の2番目の文字を取得します。これはarrayMe[0].charAt(1)に相当します。

あなたは2D配列、使用を構築したい場合:

var arrayMe = []; 
$(".cheers").each(function(index){ 
    var $this = $(this); 
    arrayMe[index] = [$this.attr('data-fname'), 
         $this.attr('data-lname')]; 
}); 
alert(arrayMe);  // Array. Shows all pairs, eg: [['fname', 'lname'], ...] 
alert(arrayMe[0]);  // Array. Shows first pair, eg: ['fname', 'lname'] 
alert(arrayMe[0][0]); // String. fname   eg: 'fname' 
alert(arrayMe[0][1]); // String. lname   eg:   'lname' 

(私も$(this)$('.cheers')を交換することによって、あなたのコード内で別の問題を修正しました)

+0

完璧!私はそれが今働く方法を見る! – hellomello

0

私はあなたを見ることができるものから、値を配列に追加するのではなく、代わりにarrayMe [index]に格納されている文字列に追加します。

、私はあなたが欲しいと考えているものを達成するために、配列に格納するときに使用してみてください:

var arrayMe = []; 
$(".cheers").each(function(index){ 
    arrayMe[index][0] = $(".cheers").attr('data-fname'); 
    arrayMe[index][1] = $(".cheers").attr('data-lname'); 
}); 
0

あなたがあなたのコードを変更する必要があります:あなたはFNAMEとLNAMEにアクセスしたい場合は

arrayMe[index] = [$(".cheers").attr('data-fname'), $(".cheers").attr('data-lname')]; 
1

別途、配列に入れてください:

var arrayMe = []; 
$(".cheers").each(function(index){ 
    arrayMe[index] = [$(this).attr('data-fname'),$(this).attr('data-lname')]; 
}); 

また、$(this).attrはあなたに属性を与えます$(".cheers").attrは常にこのことについて何あなたに

1

の最初の要素の属性を与える現在の要素のUTE、:ダブルリターンアレイが必要な理由

var arrayMe = $(".cheers").map(function() { 
    return [[ $(this).data('fname'), $(this).data('lname') ]]; 
}).get(); 

は説明のための斜視さんのコメントを参照してください。

+0

'.map()'には、Arrayを返すときに、構築されているArrayに追加されるのではなく、代わりに連結されているという変わった特徴があります。これを克服するには、戻り値を別のArrayにラップする必要があります。その結果、連結された配列が返されます。 'return [[...、...]]; ' –

+0

うわー!これは面白い。ちょうどテストされ、あなたは正しいです!ありがとう、私はそれについて知りませんでした.. jQueryのソースコードを見て、興味深い.. – dfsq

+0

さらに、 '.map'はjQueryオブジェクトを返します。これを配列に変換するには、最後に '.toArray()'を追加する必要があります。 –

関連する問題