我的js for循环在0之后停止?

时间:2013-08-14 13:52:03

标签: javascript html dom for-loop break

我写了一些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

2 个答案:

答案 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);