【问题标题】:Javascript custom function with a check inside for loop带有检查内部 for 循环的 Javascript 自定义函数
【发布时间】:2015-09-04 17:16:58
【问题描述】:

我可能真的把事情复杂化了......而且很难解释,所以我只在这里展示代码:

for (var i = 0; i < x.length; i++) {
    (function(i) {
        if (x[i].className === 'RU') {
            x[i].style.display = 'none';
            if (x[i].previousSibling.tagName === 'BR' && x[i].previousSibling.style.display != 'none') {
                x[i].previousSibling.style.display = 'none';
            }
        }
    })(i);
}

这很好,但我想做的是在循环内创建一个函数,该函数将检查每个 x[i].previousSibling 是否属于“BR”类型。所以我需要声明一个函数,它会自行循环,直到它到达一个不是“BR”标签的元素。我试过了:

for (var i = 0; i < x.length; i++) {
    (function(i) {
        if (x[i].className === 'RU') {
            x[i].style.display = 'none';
            var check = true;
            var a = '';
            function foo() {
                while (check) {
                    if (x[i].previousSibling.tagName === 'BR' && x[i].previousSibling.style.display != 'none') {
                        x[i].previousSibling.style.display = 'none';
                        a = x[i].previousSibling;
                    }else
                        check = false;
                    foo();
                }
            }
        }
    })(i);
}

那什么也没做...我认为它甚至没有进入foo 函数。有什么建议吗?

【问题讨论】:

  • 您在那里声明了一个函数,但没有执行它。该脚本将在 x.length 上声明函数 foo ,仅此而已。尝试在 for 之外声明函数,并在 var 声明后调用它,您可以为函数设置 x 和 check 参数。 (不知道编码试图这样做)。
  • @ecarrizo 我想我只是需要一双全新的眼睛。稍加修改,我就得到了我想要的。谢谢你的建议。将其发布为答案,我将标记为正确。
  • 哈哈!发生了..没关系,粘贴您的工作代码作为答案并接受它:)(您可以回答自己的问题);

标签: javascript loops for-loop while-loop


【解决方案1】:

经过一些调整并去掉不必要的变量后,以下是有效的方法:

for (var i = 0; i < x.length; i++) {
    (function(i) {
        if (x[i].className === 'RU') {
            x[i].style.display = 'none';
            var a = x[i];
            foo();
            function foo() {
                if (a.previousSibling && a.previousSibling.tagName === 'BR' && x[i].previousSibling.style.display != 'none') {
                    x[i].previousSibling.style.display = 'none';
                    a = a.previousSibling;
                    foo();
                }
            }
        }
    })(i);
}

【讨论】:

  • 为什么不直接使用while 循环呢? while (a.previousSibling &amp;&amp; a.previousSibling.tagName === 'BR' &amp;&amp; x[i].previousSibling.style.display != 'none') { x[i].previousSibling.style.display = 'none'; a = a.previousSibling; } 。甚至:for (var a = x[i]; a.previousSibling &amp;&amp; a.previousSibling.tagName === 'BR' &amp;&amp; x[i].previousSibling.style.display != 'none'; a = a.previousSibling) { x[i].previousSibling.style.display = 'none'; }
  • 证明:“不止一种给猫剥皮的方法”:)
猜你喜欢
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
相关资源
最近更新 更多