Подтвердить что ты не робот

Получить в общей сложности jquery.each()

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

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

Ответ 1

Два варианта:

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

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

Ответ 2

$('#accordion li').length;

Ответ 3

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

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

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

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

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

Ответ 4

Хорошо, поэтому лучший способ сделать это: сначала нарисуйте завернутый набор на переменную, чтобы вам больше не приходилось выполнять поиск 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, только один взгляд вверх, и поэтому вам нужно возиться в каждой функции с необходимостью знать содержимое обернутого набора, чтобы знать его длину. красота этого над прилавком заключается в том, что на каждой итерации каждого вы уже знаете длину.

Ответ 5

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

Например, 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
  }
});