-1

这段代码,

for (a = 0; a < 5;a++){ 
    var namex = document.getElementsByClassName("tooltip_sticky")[a].getAttribute("name",2);
    var n=namex.split("'");
    i = 0;
    while(i < 30) {
    var achou = n[i].indexOf("mission=1");
        if (achou == -1) {
        alert(achou);
        i++;
        }
        else {
            alert("Lol");
            i++;
        }
    }
}

它必须先运行 a 作为 0,然后运行 ​​while 30 次,返回到 a,将 a 设置为 1,再运行 30 次,返回到 a,设置为 2,再运行 30 次......

但它在前 30 次执行 WHILE,然后停止,为什么不返回 FOR?

4

1 回答 1

2

这里的基本问题是循环可能无法继续的原因只有两个:

  1. 你没有显示的东西正在改变a, 或

  2. 一个错误被抛出(这更有可能)。

在后一种情况下,可以在浏览器的 JavaScript 控制台中找到错误。

无论哪种情况,使用浏览器内置的调试器单步执行代码可以帮助您找出错误所在。

从评论来看,听起来var n=namex.split("'");不一定会产生一个至少有 30 个元素的数组。所以你需要改变你的内循环:

var n=namex.split("'");
i = 0;
while(i < n.length) { // <=== Change is here

...否则,n[i]可能会undefined并尝试在其上调用方法会引发错误。


FWIW,你的while循环也想成为一个for循环:

for (i = 0; i < n.length; ++i) {
    var achou = n[i].indexOf("mission=1");
    if (achou == -1) {
        alert(achou);
    }
    else {
        alert("Lol");
    }
}

您没有在代码中ai在代码中显示任何声明。我假设您已经在某处声明了它们;如果没有,您将成为隐式全局恐怖的牺牲品。


最后:据我所知,getAttribute只接受一个参数,而不是两个

于 2013-07-16T08:31:02.067 回答