如何跳转到jQuery.each()util中的下一个迭代?

时间:2009-01-26 22:14:15

标签: javascript jquery iteration

我正在尝试迭代一系列元素。 jQuery的文档说:

jquery.Each() documentation

  

返回非false与for循环中的continue语句相同,它将立即跳到下一次迭代。

我试过称'返回非假;'并且'非虚假;' (没有返回)两者都没有跳到下一次迭代。相反,他们打破了循环。我错过了什么?

6 个答案:

答案 0 :(得分:761)

非虚假意味着:

return true;

所以这段代码:

var arr = [ "one", "two", "three", "four", "five" ];
$.each(arr, function(i) {
    if(arr[i] == 'three') {
        return true;
    }
    alert(arr[i]);
});

将提醒一,二,四,五

答案 1 :(得分:60)

通过'return non-false',它们意味着返回任何不能用于布尔值false的值。因此,您可以返回true1'non-false'或其他任何您能想到的内容。

答案 2 :(得分:5)

Javascript有点'真实'和'虚假'的想法。如果一个变量有一个值,那么通常你会看到它有'真实性' - 无效,或者没有值倾向于'虚假'。下面的片段可能会有所帮助:

var temp1; 
if ( temp1 )...  // false

var temp2 = true;
if ( temp2 )...  // true

var temp3 = "";
if ( temp3 ).... // false

var temp4 = "hello world";
if ( temp4 )...  // true

希望有帮助吗?

此外,值得查看Douglas Crockford的这些视频

更新:感谢@cphpython发现破损的链接 - 我已更新为现在指向工作版本

The Javascript language

Javascript - The Good Parts

答案 3 :(得分:3)

不要忘记你有时会从块的末尾掉下来进入下一次迭代:

$(".row").each( function() {
    if ( ! leaveTheLoop ) {
        ... do stuff here ...
    }
});

而不是像这样实际返回:

$(".row").each( function() {
    if ( leaveTheLoop ) 
        return; //go to next iteration in .each()
    ... do stuff here ...
});

答案 4 :(得分:2)

如果您按字面意思返回false,则循环会中断。例如:

// this is how jquery calls your function
// notice hard comparison (===) against false
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
   break;
}

这意味着您可以返回任何其他内容,包括undefined,如果您不返回任何内容,则返回该内容,因此您只需使用空的return语句:

$.each(collection, function (index, item) {
   if (!someTestCondition)
      return; // go to next iteration

   // otherwise do something
});

这可能因版本而异;这适用于jquery 1.12.4。但实际上,当你退出函数的底部时,你也没有返回任何东西,这就是循环继续的原因,所以我希望没有任何可能返回的东西 not 继续环。除非他们想强迫每个人开始返回一些东西来保持循环,否则 没有返回任何东西来保持循环。

答案 5 :(得分:-3)

jQuery.noop()可以提供帮助

$(".row").each( function() {
    if (skipIteration) {
        $.noop()
    }
    else{doSomething}
});
相关问题