微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

嵌套jQuery.each() – 继续/ break

考虑下面的代码
var sentences = [
        'Lorem ipsum dolor sit amet,consectetur adipiscing elit.','Vivamus aliquet nisl quis velit ornare tempor.','Cras sit amet neque ante,eu ultrices est.','Integer id lectus id nunc venenatis gravida nec eget dolor.','Suspendisse imperdiet turpis ut justo ultricies a aliquet tortor ultrices.'
    ];

    var words = ['ipsum','amet','elit'];

    $(sentences).each(function() {
        var s = this;
        alert(s);
        $(words).each(function(i) {
            if (s.indexOf(this) > -1)
            {
                alert('found ' + this);
                return false;
            }
        });
    });

有趣的部分是嵌套的jQuery.each()循环。根据the documentation,返回false将跳出循环(停止循环的执行 – 类似于正常的JavaScript break语句),并且返回非false将停止当前迭代并继续下一次迭代(类似于常规JavaScript continue语句)。

我可以打破或继续自己的jQuery.each(),但是使用嵌套的jQuery.each,我发现很难从子循环中突破父循环。我可以使用一个布尔值,并在每个子迭代更新它,但我想知道是否有一个更简单的方法

我已经设置an example at jsFiddle如果你想乱搞它。只需点击“测试”按钮运行上面所示的示例。

TLDR:在jQuery的上下文中有什么类似于标记的continue或break吗?

解决方法

你应该这样做没有jQuery,它可能不是“漂亮”,但有更少的事情,它更容易做完全你想要的,像这样:
var sentences = [
    'Lorem ipsum dolor sit amet,'Suspendisse imperdiet turpis ut justo ultricies a aliquet tortor ultrices.'
];

var words = ['ipsum','elit'];

for(var s=0; s<sentences.length; s++) {
    alert(sentences[s]);
    for(var w=0; w<words.length; w++) {
        if(sentences[s].indexOf(words[w]) > -1) {
            alert('found ' + words[w]);
            return;
        }
    }
}

You can try it out here.我不知道这是你的确切行为,但现在你不是在一个闭包里创建的双.each(),你可以返回或打破,无论何时你想在这种情况下。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐