打破jQuery每个函数的父函数

bcm*_*bcm 6 javascript jquery

我有一个$ .each jQuery函数坐在父javascript函数中,如何在某个索引(i)上打破父函数?

Arn*_*anc 10

要从一个循环中断,只需返回false:

$('something').each(function() {
    if (need_to_break) {
        return false; // returning false stops the loop
    }
});
Run Code Online (Sandbox Code Playgroud)

要立即从多个each循环中断/返回,只需抛出异常:

var $break = {};
$('something').each(function() {
    try {
        $('something').each(function() {
            $('something').each(function() {
                $('something').each(function() {
                    throw $break;
                });
            });
        });
    } catch(E) {
        if (E != $break) throw E;
    }
});
Run Code Online (Sandbox Code Playgroud)

并在你想要返回的循环中捕获它.

这是怎样的prototype.js 工具break,在他们的Enumerable.each(),例如.

更传统的解决方案:

var do_break = false;
$('something').each(function() {
    $('something').each(function() {
        $('something').each(function() {
            $('something').each(function() {
                do_break = true;
                return false;
            });
            if (do_break) {
                return false;
            }
        });
        if (do_break) {
            return false;
        }
    });
    if (do_break) {
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • Aahahaaha哦,上帝 (2认同)
  • 这只能获得突破异常,因此在这方面非常安全.是的,这是非常规的.但这实际上是一种非常有效的方法; 如果你尝试以另一种方式(使用多个嵌套循环)执行此操作,您将看到1.您正在执行throw/catch将要执行的操作,并且2.这更难以阅读和理解. (2认同)

lon*_*day 6

从它的声音,你有这样的事情:

function outer(someParam) {
    $.each(someParam, function(i) {
        // do something with each value in someParam
    });
}
Run Code Online (Sandbox Code Playgroud)

您希望从outer内循环达到某个值时返回.你不能一气呵成.关键点在于,return false$.each回调中结束"循环".然后,如果需要,可以设置变量以有条件地返回:

function outer(someParam) {
    var returnNow = false;
    $.each(someParam, function(i) {
        if (i === 5) {
            returnNow = true;
            return false;
        }

        // do something with each value in someParam
    });

    if (returnNow) {
        return;
        // return immediately
    }

    // do some other action if you want to
}
Run Code Online (Sandbox Code Playgroud)