Javascript'while'循环导致浏览器崩溃

时间:2015-12-22 10:51:20

标签: javascript while-loop crash

我有一个'搜索和突出显示'功能,可以查看元素中的每个节点并突出显示关键字的每个实例。在这个函数中,我使用了一段时间(真实),似乎导致浏览器崩溃或滞后!这个循环有什么替代方案吗? 任何帮助都会非常感激。

console.log(keyword);
                if (keyword != "") {
                    SearchResultCount = 0;
                    currSelected = -1;
                    if (element) {
                        if (element.nodeType == 3) {
                            while (true) {
                                var value = element.nodeValue; // Search for keyword in text node
                                var idxSensitive = value.indexOf(keyword);
                                var idxInsensitive = value.toLowerCase()
                                        .indexOf(keyword);

                                if ((idxInsensitive < 0)
                                        && (idxSensitive < 0))
                                    break; // not found, abort
                                else if ((idxInsensitive >= 0)
                                        && (idxSensitive < 0))
                                    var idx = idxInsensitive;
                                else if ((idxSensitive >= 0)
                                        && (idxInsensitive < 0))
                                    var idx = idxSensitive;

                                var span = document.createElement("span");
                                var text = document.createTextNode(value
                                        .substr(idx, keyword.length));
                                span.appendChild(text);
                                span.setAttribute("class",
                                        "highlightedText");
                                span.style.backgroundColor = "lightblue";
                                span.style.color = "black";
                                text = document.createTextNode(value
                                        .substr(idx + keyword.length));
                                element.deleteData(idx, value.length - idx);
                                var next = element.nextSibling;
                                element.parentNode.insertBefore(span, next);
                                element.parentNode.insertBefore(text, next);
                                element = text;
                                SearchResultCount++; // update the counter
                            }
                        }

2 个答案:

答案 0 :(得分:2)

while循环需要false条件或break才能结束。我看到的只是一个while (true),它永远不会评估为false。由于你有一个永无止境的循环,它会导致你的浏览器崩溃。虽然如果breakidxSensitive为负数,idxInsensitive应为r.js -o build.js,但任何其他值都会使循环永久运行。

答案 1 :(得分:0)

要永久循环(而不是while(true)),可以使用:

setTimeout(function, 1);

//Or

for (var i = 0; i < Infinity; i++) {
    //Code goes here
}