2012-01-16 2 views
0

У меня есть ниже цикл:манипулировать массив с помощью JQuery

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

, который стреляет 3 раза. Когда я заглядываю в этот массив, я вижу, что есть только один (последний добавленный) элемент. Зачем ?

+3

Что этот код внутри? Если вы находитесь внутри другой функции или цикла, вы каждый раз возвращаете myArray. – MetalFrog

+0

Это весь код? – Tyler

ответ

3

Потому что вы используете declare 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

+0

@gdoron Я не вижу весь код. Вполне возможно, что OP вызывает функцию с помощью '.click(). Click(). Click()' = 3 триггера. Тем не менее, если 'var myArray = [];' находится внутри обработчика события click, массив будет доступен только локально. –

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); 
Смежные вопросы