Ответ 1
Два варианта:
$('#accordion li').size(); // the jQuery way
$('#accordion li').length; // the Javascript way, which jQuery uses
Поскольку jQuery вызывает длину под капотом, быстрее использовать это вместо вызова size().
Я использую jquery.each() для перебора группы li. Мне нужно общее количество всех совпадений. Единственный способ создать переменную count вне .each() и увеличить ее внутри .each()? Это не кажется очень изящным.
var count;
$('#accordion li').each(function() {
++count;
});
Два варианта:
$('#accordion li').size(); // the jQuery way
$('#accordion li').length; // the Javascript way, which jQuery uses
Поскольку jQuery вызывает длину под капотом, быстрее использовать это вместо вызова size().
$('#accordion li').length;
Хорошо, я только что увидел этот вопрос, и вы уже приняли ответ, но я все равно останусь.
Кажется, что точка вопроса связана с увеличением счетчика.
Дело в том, что метод jQuery .each()
позаботится об этом для вас. Первый параметр для .each()
- это счетчик, поэтому вам не нужно делать это самостоятельно.
$('#accordian li').each(function(index) {
// index has the count of the current iteration
console.log( index );
});
Итак, как вы можете видеть, для вас есть элегантное решение.
Хорошо, поэтому лучший способ сделать это: сначала нарисуйте завернутый набор на переменную, чтобы вам больше не приходилось выполнять поиск sizzle dom:
var $myListItems = $('#accordian li');
Примечание. Мое предпочтение заключается в том, чтобы положить $в начало любых vars, которые были объединены в jQuery, поэтому $myListItems в отличие от myListItems
Затем установите var вне каждой функции, которая имеет длину завернутого набора:
var myLength = $myListItems.length;
Обратите внимание на отсутствие $здесь, поскольку var не является объектом jQuery.
Теперь запустите каждую функцию с переменной для индекса.
$myListItems.each(function(index){
// myLength has the length
// index has the current, 0 based index.
});
Теперь у вас есть то, что вы просили в OP, только один взгляд вверх, и поэтому вам нужно возиться в каждой функции с необходимостью знать содержимое обернутого набора, чтобы знать его длину. красота этого над прилавком заключается в том, что на каждой итерации каждого вы уже знаете длину.
Одна из больших проблем, которую я еще не нашел, заключается в том, что если у вас есть два набора одной и той же вещи, которую вы будете повторять.
Например, 2 заголовка таблицы, которые вы просматриваете по количеству заголовков столбцов. Если вы используете длину для ($ item.children(). Find ('thead tr th'). Each...) для каждого предложения и у вас есть 2 таблицы, это удвоит длину вашей длины, которую вы пытаетесь пройти потенциально [5 заголовков столбцов в каждой таблице будут возвращать длину 10].
Вы можете сделать оба с идентификатором и иметь разные имена, но если добавить их динамически, это может стать головной болью.
Единственный способ, который я нашел однажды внутри foreach, это использовать $ (this):
$item.children().find('thead tr th').each(function(i, th) {
// I am working with a table but div could be used, or something else.
// I have 2 tables with 5 column headers, the below len return
var len = $(this).closest('table').find('thead tr th').length;
if (i < len) {
// ...your code here
}
});