2

我编写了一些 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;也打破了外循环,如果是,我怎样才能只跳出一个循环?-谢谢

4

2 回答 2

1

您在这里进行了错误的变量重用。您在两个内部循环中重复使用i,重置其起始值,然后将其递增直到达到documentContent.length(可能大于 10)。然后外部循环语句将被发现为 false(i的值在内部循环),您将退出它。我建议你在内部循环中使用不同的变量,这样你就不会影响外部循环。(虽然最后一个内部循环设置了外部语句检查之前i的最后一个值,但这是错误的在这些循环中的任何一个中重复使用,并且必须在它们中进行更改)。

于 2013-08-14T13:58:58.897 回答
1

和代码里面的代码有关系吗?

是的。

break;内循环中的语句是否也会中断外循环

不,但是内循环确实修改了外循环的计数器变量。您应该使用不同的变量名,以及局部变量

// 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 不支持对字符串进行字符访问的括号表示法。与那些循环相比,使用简单的indexOfString 方法会更好:

var startJs = documentContent.indexOf('[', jsBox),
    endJs = documentContent.indexof(']', startJs);
于 2013-08-14T14:14:39.830 回答