想象一下,我想循环遍历一个jQuery对象列表,并为每个对象执行一些函数。但是,如果在某个地方,标准不符合,那么我只想continue;
到其他对象。简单的伪代码可能类似于:
$('#element').each(function(){
// some code here
if (!$(this).is('.included')) {
continue; // This keyword of course, doesn't work here
}
// more code here, which won't get executed for some elements
});
我想达到和以下相同的效果:
for (var i = 0; i < 10; i++) {
if (i % 2 == 0 ) {
continue;
}
console.log(i);
}
我知道我可以在return false;
方法中的某个地方each();
完全打破循环。但我不想打破循环。我只想跳过一些元素。我也知道我可以使用if-else
块跳过元素,但是有更简洁的方法吗?
答案 0 :(得分:9)
只需使用return;
代替continue;
(不是return false;
)。
答案 1 :(得分:2)
当您使用.each
jQuery函数时,您正在为Array中的每个值传递要执行的函数。 continue
关键字不是隐含在函数中,而是仅存在于直接循环中。返回false值时jQuery断开的原因是因为jQuery库中的这一行:
if ( callback.apply( object[ name ], args ) === false ) {
break;
}
当执行的函数返回false时,jQuery故意退出循环。添加这个是常识,对吧?由于它使用===
,您可以返回任何不等于false
的内容,包括undefined
,null
,0
,true
,什么的只要它不等于false
,循环就会继续。
$.each([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], function(i) {
if(i > 5) { return false; } // if(i > 5) { break; }
if(i < 2) { return null; } // if(i < 2) { continue; }
console.log(i);
});
你的控制台看起来像这样:
2
3
4
5
注意它没有记录0和1. i
小于2,所以它继续没有记录。请注意,它没有记录6,7,8和9.这是因为当i
变为大于5时,它返回false。
答案 2 :(得分:1)
“返回非假是与a相同 在for循环中继续声明;它将立即跳到下一个 迭代。 “
我通常会return 'continue';
执行return;
,它比简单return true;
,return 1;
或return 'non-false';
我也遇到了{{1}},这种方式非常有趣。
答案 3 :(得分:0)
我真的不认为需要continue
声明:
$('#element').each(function(){
// some code here
if( $(this).is('.included') ) {
// more code here, which won't get executed for some elements
}
});
这应该完全相同,除非我遗漏了什么。