我正在使用jquery的.each()迭代一组li。我需要总共匹配所有的李。是唯一的方法在.each()之外创建一个count变量并在.each()内增加它?它似乎不太优雅。
var count;
$('#accordion li').each(function() {
++count;
});
答案 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
属性。