Javascript 限制.each()循环中的项的更简单方法
我一直想知道是否有一种好的、类似jQuery的方法来完成以下工作:Javascript 限制.each()循环中的项的更简单方法,javascript,jquery,Javascript,Jquery,我一直想知道是否有一种好的、类似jQuery的方法来完成以下工作: var count = 0; $("p").each(function() { if (count >= 5) return false; $(this).toggleClass("highlight"); count++; }); jQuery中是否有一个类似于each()的函数,允许我设置它将循环多少项的限制,或者这是做事情的最佳方式?最简单的事情是.slice:
var count = 0;
$("p").each(function() {
if (count >= 5)
return false;
$(this).toggleClass("highlight");
count++;
});
jQuery中是否有一个类似于
each()
的函数,允许我设置它将循环多少项的限制,或者这是做事情的最佳方式?最简单的事情是.slice
:
$("p").slice(0, 5).toggleClass("highlight");
// only <p>s from index 0 (inclusive) to 5 (exclusive)
$(“p”).slice(0,5).toggleClass(“highlight”);
//仅从指数0(含)到5(不含)之间s
看一看。这将拆分$(“p”)
返回的数组,以便与一起使用。each()
:
.slice()
将开始索引和结束索引作为参数。在上面的示例中,我们从第一个数组元素(索引0)开始,返回索引4之前的接下来5个元素。您可以简单地限制所选元素:$(“p:lt(5)”)。toggleClass(“highlight”)代码>这对你有用吗
$("p").each(function(index){
if (index >4)
{
return false;
}
...
});
使用for循环将循环重复一定次数(预先知道)。如果不知道重复次数,则使用while循环(或每个-功能编程中的模拟)
所以
vari;
对于(i=0;i<6;i+=1){
$(“p”)[i]。切换类(“突出显示”);
}
另一种编写方法是使用过滤器
:
$("p").filter(function(index) { return index < 5 }).toggleClass("highlight");
$(“p”).filter(函数(索引){returnindex<5}).toggleClass(“highlight”);
您不能在JavaScript中声明变量的类型。对不起,我的坏习惯是从其他语言遗留下来的。这与问题无关(因为它已经被回答了),但是为了将来的参考,传递给each方法的函数可以带几个参数。第一个是每个方法的当前迭代。使用它,而不是跟踪你自己的计数器来清理代码;p+1值得注意的是,这无法使用本机选择器引擎。我没有查看代码,但sizzle可能足够聪明,可以使用本机查询p
,然后应用过滤器-因此它可能几乎与.slice()
一样快。我只是在回显文档,我不确定sizzle实际做了什么。还需要注意的是,通过返回false
,您可以提前打破每个错误,从而避免不必要的迭代。谢谢。@Derek:您可以分割数组和字符串,jQuery还增加了对jQuery对象的支持。如果$(p)
应该是$(“p”)
,我不确定这是否非常有效。最好选择一次。@pimvdb这是一个错误。选择器应始终被引用(当然,如果它不是变量)。修复。老实说,这段代码非常糟糕:它在每个循环中再次搜索文档中的p
元素。所以效率很低。除此之外,JS还有一个++
操作符,因此不需要使用+=1
@ThiefMaster,这就是示例。如果愿意,可以替换注释“//do something”上的循环体。:)我并不是故意使用++操作符,因为从中产生的问题比好的多。检查。在()的for()循环头之外使用时可能会出现问题。。但在内部,这几乎是每个人都在使用的东西(是的,我知道,“每个人都做了什么”也可以用来证明真正糟糕的事情——但在这种情况下,这是真的)。关于“这是一个例子”:并不是所有的人都很聪明——有些人只会看到并复制它。
var i;
for (i = 0; i < 6; i += 1) {
$("p")[i].toggleClass("highlight");
}
$("p").filter(function(index) { return index < 5 }).toggleClass("highlight");