我写了一些js代码来循环遍历html文档,我的循环只是在0之后停止[这是循环的开始]
for (i=0;i<10;i++) {
if (jsBox >= 0) {
for (i=jsBox;i<documentContent.length;i++) {
if (documentContent[i] == '[') {
startJs = i;
console.log(startJs);
break;
}
};
} else {
console.log('Note: no js container found');
}
//find end of css
for (i=startJs;i<documentContent.length;i++) {
if (documentContent[i] == ']') {
endJs = i;
console.log(endJs);
break;
}
}
}
它与代码中的代码有关吗?内循环中的break;
语句是否也会破坏外部循环,如果是这样,我怎么才能打破一个循环呢?
-Thanks
答案 0 :(得分:1)
你在这里做错了变量重用。你在两个内部循环中重用 i ,重置它的起始值然后递增它直到它达到 documentContent.length (可能大于10)。然后是outter循环语句将被发现为false( i 的值在内部循环中已更改),您将退出该语句。 我建议你在内部循环中使用不同的变量,这样你就不会受到外部循环的影响。(尽管最后一个内部循环在outter语句检查之前设置了 i 的最后一个值在这里,在任何这些循环中重复使用是错误的,必须在两者中进行更改。
答案 1 :(得分:1)
是否与代码中的代码有关?
是
内部循环中的
break;
语句是否也会破坏外部循环
没有。但是内循环确实修改了外循环的计数器变量。您应该使用其他变量名称,还应使用local variables:
// assuming already declared: jsBox, documentContent, startJs, endJs
for (var i=0;i<10;i++) {
if (jsBox >= 0) {
for (var j=jsBox; j<documentContent.length; j++) {
if (documentContent[j] == '[') {
startJs = j;
console.log(startJs);
break;
}
}
} else {
console.log('Note: no js container found');
}
//find end of css
for (var j=startJs; j<documentContent.length; j++) {
if (documentContent[j] == ']') {
endJs = j;
console.log(endJs);
break;
}
}
}
顺便说一句,较旧的IE不支持对字符串进行字符访问的括号表示法。使用简单的indexOf
String method比使用那些循环要好得多:
var startJs = documentContent.indexOf('[', jsBox),
endJs = documentContent.indexof(']', startJs);