2010-07-27 8 views
27

Я использую jquery's .each() для перебора группы li. Мне нужно в общей сложности все совпадения li. Единственный способ создать переменную count вне .each() и увеличить ее внутри .each()? Это не очень элегантно.получить общее количество jQuery .each()

var count; 
$('#accordion li').each(function() { 
    ++count; 
}); 
+0

спасибо. У тебя был хороший день. –

ответ

46

два варианта:

$('#accordion li').size(); // the jQuery way 
$('#accordion li').length; // the Javascript way, which jQuery uses 

Поскольку JQuery называет длину под капотом, это быстрее, чтобы использовать то, что вместо вызова размер().

+4

Документы jQuery действительно рекомендуют использовать 'length', а не' size() ': см. Комментарий по адресу http://api.jquery.com/size/ – tvanfosson

+2

+1 -' length' ftw –

+0

Да, мне просто не понравилось повторение селектора jquery ... один раз для каждого(), а затем снова для size(). Я только что назначил $ ('# accordion li') для var now и вызвал это дважды. –

6

Ну, я только что увидел этот вопрос, и вы уже приняли ответ, но я все равно оставлю его.

Точка зрения, похоже, связана с увеличением счетчика.

Дело в том, что метод jQuery's .each() позаботится об этом для вас. Первый параметр для .each()- это счетчик, поэтому вам не нужно делать это самостоятельно.

$('#accordian li').each(function(index) { 
     // index has the count of the current iteration 
    console.log(index); 
}); 

Таким образом, как вы можете видеть, в вашем распоряжении элегантное решение.

+1

Привет, Спасибо за ответ. Мне действительно нужен общий счет. Я знаю, что индекс дает мне счетчик приращений, но мне нужно общее количество всех совпадающих элементов списка. –

0

Ok так что лучший способ сделать это состоит в следующем: во-первых, карта обернутый набор переменной, так что вы никогда не должны делать поиск шипение Dóm снова:

var $myListItems = $('#accordian li'); 

Примечание: я предпочитаю положить $ в начале любого Варса, которые являются JQuery обернутого набора, следовательно, $ myListItems в отличие от myListItems

Затем установите вар вне каждую функции, которая имеет длину обернутого набора:

var myLength = $myListItems.length; 

Обратите внимание на отсутствие $ здесь, поскольку var не является объектом jQuery.

Теперь запустите каждую функцию с переменной для индекса.

$myListItems.each(function(index){ 
    // myLength has the length 
    // index has the current, 0 based index. 
}); 

Теперь у вас есть то, что вы просили в ОП только с одним взглядом вверх и поэтому нужно шарить в каждой функции с того, чтобы знать содержание обернутой установить только знать длину его , красота этого над прилавком заключается в том, что на каждой итерации каждого вы уже знаете длину.

+0

согласитесь, что нам нужно не искать дом дважды, чтобы получить тот же результат – yeahdixon

Смежные вопросы