jQuery .each问题

7

是否可以在遍历项时仅运行一定次数的jQuery .each语句,而不是针对每个被迭代的项都运行一次?被迭代的JSON是一个last.fm提要(feed),当然,他们经常忽略“limit”请求。我希望通过仅运行有限次数的.each语句来绕过这个错误。

5个回答

19
var limit = 5;

$("somelement").each(function(i, val) {
      if(i > limit) return false;
      // do stuff
});
或者
$("somelement:lt(5)").each(function() {
      // do stuff
});

当jQuery已经存在一个解决方案时,这似乎是一种强制性的解决方案。 - ashchristopher
实际上这个是可以的 - 我只是在 JSON 项计数方面差了一个。谢谢。 - Kyle Hotchkiss
这不是最好的解决方案,你最好使用.slice。我添加了一个带有示例的答案。 - Paul Fournel
你能解释一下你的解决方案比这个更好在哪里吗? - kjagiello

11

6
$("somelement:lt(5)")会返回前5个元素。 - Jeremy Boyd
接受答案的评论表明,.slice() 比 :lt(x) 更有效率,为什么会这样:https://dev59.com/xXI-5IYBdhLWcg3wbHm- - Andrejs

4
最好的解决方案是使用jQuery中的.slice方法。
var limit = 5;
$("somelement").slice(0, limit).each(function(i, val) {
    // do stuff
});

2
在循环之前定义一个变量,在循环内部进行递增,如果myvar == 10,则return false;

在each函数中返回'false'会完全停止循环。http://docs.jquery.com/Core/each


这是对我有效的解决方案。在被接受的答案中,“i”不会为我返回索引,因为存在一个键。 - Skäggiga Mannen

1

当你想要停止时,从迭代器中返回{{link1:false}}。你的迭代器的第一个参数是索引(当循环遍历数组时)。


1
+1 回到你身上。我认为有些人不喜欢这种解决方案,因为它没有 slice() 或修改选择器的优雅,但这是一个全用途的解决方案... 当你需要在循环中强制执行限制时,真正的解决方案可能是在某些分析后确定某些项目是否计入限制。 - king14nyr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接