我有一个'搜索和突出显示'功能,可以查看元素中的每个节点并突出显示关键字的每个实例。在这个函数中,我使用了一段时间(真实),似乎导致浏览器崩溃或滞后!这个循环有什么替代方案吗? 任何帮助都会非常感激。
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
}
}
答案 0 :(得分:2)
while循环需要false
条件或break
才能结束。我看到的只是一个while (true)
,它永远不会评估为false
。由于你有一个永无止境的循环,它会导致你的浏览器崩溃。虽然如果break
和idxSensitive
为负数,idxInsensitive
应为r.js -o build.js
,但任何其他值都会使循环永久运行。
答案 1 :(得分:0)
要永久循环(而不是while(true)),可以使用:
setTimeout(function, 1);
//Or
for (var i = 0; i < Infinity; i++) {
//Code goes here
}