2012-01-16 14 views
0

によってアレイを操作します。その配列の中を見ると、最後に追加された項目が1つしかないことがわかります。どうして ?私は以下のループを持ってjQueryの

+3

の内側に、このコードは何ですか?別の関数やループの中にいる場合は、取得するたびにmyArrayをリセットします。 – MetalFrog

+0

これはコード全体ですか? – Tyler

答えて

3

ローカル変数としてmyArrayを宣言するためです。配列の値を保持する場合は、var myArray = [];を共通関数の外に移動します。

var myArray = []; // This variable is shared by all instances of somefunction 
$('#example').click(function() { 
    $(this).children('a').each(function() { 
     myArray.push($(this).attr('href')); //myArray in the parent scope 
    }); 
}); 
+0

それはjquery関数の外で宣言されているので、私はこれを問題とは思わない。 +それは1つの値を持っています... – gdoron

+0

@gdoronコードのすべてが表示されません。 OPが '.click()。click()。click()' = 3トリガを使って関数を呼び出すことは完全に可能です。それでも、 'var myArray = [];'がclickイベントハンドラの内部にある場合、配列はローカルでしか利用できません。 –

1

私はループの方がはるかに高速ですので、forループを使用することをお勧めします。

http://jsperf.com/jquery-each-vs-for-loop/44

これを試してみてください:

var myArray = [], 
    links = $("a.link"); 
for (var i = 0, l = links .length; i < l; i++) { 
    myArray.push($(links[i]).attr("href")); 
} 
console.log(myArray); 
関連する問題