Javascript 只做一次,只做一段时间,但不要做一次

Javascript 只做一次,只做一段时间,但不要做一次,javascript,if-statement,for-loop,while-loop,Javascript,If Statement,For Loop,While Loop,这个代码 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 =

这个代码

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++;
        }
    }
}
它必须先以0运行a,然后执行30次while,返回a,将a设置为1,执行30次以上,返回a,设置为2,执行30次while


但是它在前30次的时候就停下来了,为什么它不回到前30次呢

这里最基本的一点是,循环可能无法继续的原因只有两个:

您尚未显示的内容正在更改a的值,或

正在抛出一个错误,这更有可能

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

在任何一种情况下,使用浏览器内置的调试器单步执行代码都可以帮助您找到错误所在

从注释来看,它听起来像var n=namex.split';不一定会产生一个至少包含30个元素的数组。因此,您需要更改内部循环:

var n=namex.split("'");
i = 0;
while(i < n.length) { // <=== Change is here
您的代码中没有显示a或i的任何声明。我想你已经在某处申报过了;如果没有,你就成了牺牲品


最后:据我所知,.

是的。我的猜测是,tooltip_sticky类中没有多个元素,因此当您尝试对不存在的元素使用getAttribute时,在第二次循环迭代中会出现错误。你的浏览器中内置了一个调试器,我建议你用它来单步调试代码并观察发生了什么。看看js控制台,看看是否有错误发生。注意:据我所知,.@T.J.Crowder,没有。这说明了问题,我测试了它,如果我键入数字来代替,比如:document.getElementsByClassNametooltip\u sticky[1].getAttributename,2;或document.getElementsByClassNametooltip\u sticky[2]。getAttributename,2。。。。[3] [4]等等。。它返回了正确的信息,这是不允许的!!我认为错误在while中,就在这里:n[I].indexOfmission=1;。由于n是名称的“按”拆分,因此它可能没有30个引号,在其中循环会导致错误,因为如果n[i]未定义,.indexOf of undefined返回TypeError。也许在ifor (i = 0; i < n.length; ++i) { var achou = n[i].indexOf("mission=1"); if (achou == -1) { alert(achou); } else { alert("Lol"); } }