在jQuery的`each();`方法中实现`continue;`关键字

时间:2011-12-10 09:18:29

标签: javascript jquery loops

想象一下,我想循环遍历一个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块跳过元素,但是有更简洁的方法吗?

4 个答案:

答案 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的内容,包括undefinednull0true,什么的只要它不等于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)

jQuery.each docs说:

  

“返回非假是与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
    }
});

这应该完全相同,除非我遗漏了什么。