不要做不止一次,要做一段时间,但不要做

wont do FOR more than once, do the while, but the for not

本文关键字:不止一次 一段时间      更新时间:2023-09-26

此代码,

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,运行while更多30次,回到a,设置为2,运行which 30次。。。

但它做了前30次WHILE,然后停了下来,为什么不回到FOR?

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

  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只接受一个论点,而不接受两个。