得到总共jquery的.each()

时间:2010-07-27 21:06:49

标签: javascript jquery

我正在使用jquery的.each()迭代一组li。我需要总共匹配所有的李。是唯一的方法在.each()之外创建一个count变量并在.each()内增加它?它似乎不太优雅。

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

6 个答案:

答案 0 :(得分:53)

两个选项:

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

由于jQuery在引擎盖下调用长度,因此使用它而不是size()调用会更快。

答案 1 :(得分:7)

$('#accordion li').length;

答案 2 :(得分:7)

好吧,我刚刚看到这个问题,你已经接受了答案,但我还是会留下一个。

问题的关键似乎是关于增加一个计数器。

事实是jQuery的.each()方法会为您解决这个问题。 .each() 的第一个参数是递增计数器,因此您无需亲自执行此操作。

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

正如您所看到的,内置了一个优雅的解决方案。

答案 3 :(得分:0)

好的,所以最好的方法如下:首先将包装的集合映射到变量,这样你就不必再次进行sizzle dom查找了:

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

注意:我的偏好是将$放在任何jQuery包装集的开头,因此$ myListItems而不是myListItems

然后在每个具有包装集长度的函数外部设置var:

var myLength = $myListItems.length;

注意缺少$ here,因为var不是jQuery对象。

现在使用索引的变量运行每个函数。

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

你现在已经拥有了你在OP中所要求的只有一个查找的内容,所以需要在每个函数中摸索,只需知道包装集的内容就知道它的长度。在柜台上的美妙之处在于,每一次你都知道它的长度。

答案 4 :(得分:0)

其中一个大问题(我尚未找到解决方法)是,如果您有两套相同的东西,您将进行迭代。

例如,您要遍历列标题数的2个表头。如果您对每个子句使用( $ item.children()。find('thead tr th')。each ... )上的长度,并且您有2个表,它将使您的数量增加一倍您尝试遍历的长度[每个表中的5列标题将返回10的长度。

您可以同时对一个id名称进行操作,并使用不同的名称,但是如果动态添加,则可能会令人头疼。

我在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
  }
});

答案 5 :(得分:0)

你可以试试这个

const count = $('#accordion li').each(function() {
    // Do something
}).length;

之所以有效,是因为 .each() 返回一个 jQuery object,它具有 length 属性。