Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 限制.each()循环中的项的更简单方法_Javascript_Jquery - Fatal编程技术网

Javascript 限制.each()循环中的项的更简单方法

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:

我一直想知道是否有一种好的、类似jQuery的方法来完成以下工作:

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");