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

Javascript 'while' loop causing browser to crash

本文关键字:浏览器 崩溃 Javascript 循环      更新时间:2023-09-26

我有一个"搜索和突出显示"函数,它可以查看元素中的每个节点,并突出显示关键字的每个实例。在这个函数中,我使用了一段时间(true),这似乎会导致浏览器崩溃或滞后!有什么替代while循环的方法吗?如有任何帮助,我们将不胜感激。

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
                            }
                        }

While循环需要false条件或break才能结束。我所看到的只是一个while (true),它永远不会求值为false。由于你有一个永无止境的循环,它会导致你的浏览器崩溃。虽然如果idxSensitiveidxInsensitive是负数,它应该是break,但任何其他值都将使循环永远运行。

要永远循环某个东西(而不是while(true)),可以使用:

setTimeout(function, 1);
//Or
for (var i = 0; i < Infinity; i++) {
    //Code goes here
}