2012-01-16 54 views
0

操縱陣列I具有低於循環:的jQuery

 var myArray = []; 
     $(this).children('a').each(function() { 
      myArray.push($(this).attr('href')); 
     }); 

其中觸發3次。當我查看該數組時,我發現只有一個(最後添加的)項。爲什麼?

+3

什麼是這裏面的代碼?如果你在另一個函數或循環中,你每次都重置myArray。 – MetalFrog 2012-01-16 18:31:32

+0

這是整個代碼? – Tyler 2012-01-16 18:33:29

回答

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函數之外聲明的,所以我不認爲這是問題所在。 +它確實有一個值... – gdoron 2012-01-16 18:35:15

+0

@gdoron我沒有看到所有的代碼。 OP很可能使用'.click()。click()。click()'= 3觸發器調用函數。但是,如果'var myArray = [];'在click事件處理程序中,則該數組只能在本地可用。 – 2012-01-16 18:37:32

1

我建議使用循環,因爲它們快得多。

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);