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。也许在i
for (i = 0; i < n.length; ++i) {
var achou = n[i].indexOf("mission=1");
if (achou == -1) {
alert(achou);
}
else {
alert("Lol");
}
}