Javascript'而'循环导致浏览器崩溃
Javascript 'while' loop causing browser to crash
我有一个"搜索和突出显示"函数,它可以查看元素中的每个节点,并突出显示关键字的每个实例。在这个函数中,我使用了一段时间(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
。由于你有一个永无止境的循环,它会导致你的浏览器崩溃。虽然如果idxSensitive
和idxInsensitive
是负数,它应该是break
,但任何其他值都将使循环永远运行。
要永远循环某个东西(而不是while(true)),可以使用:
setTimeout(function, 1);
//Or
for (var i = 0; i < Infinity; i++) {
//Code goes here
}
相关文章:
- 为什么这会造成一个无休止的循环并使我的浏览器崩溃
- javascript audio currentTime使一些浏览器崩溃
- 在浏览器崩溃之前检测到内存耗尽
- 输入输入前浏览器崩溃
- three.js内存泄漏/浏览器崩溃
- Ajax 请求仪表板页面上的浏览器崩溃
- set超时在“while”内会导致浏览器崩溃.我怎样才能避免它
- 设置设置间隔函数正在运行并导致浏览器崩溃
- 高效的Javascript组合函数,不会使浏览器崩溃
- 我的脚本使浏览器崩溃
- SlickGrid在选择大范围的行时使浏览器崩溃
- setInterval 在运行用户脚本时使我的浏览器崩溃
- 添加依赖项后浏览器崩溃
- Javascript/Jquery代码使我的浏览器崩溃
- 无限滚动会导致浏览器崩溃吗?
- 为什么这 while 循环会使浏览器崩溃
- 设置间隔导致浏览器崩溃
- JavaScript函数使我的浏览器崩溃
- 旧的JavaScript函数使浏览器崩溃
- 如何使用 IndexedDB 制作一个很长的字符串而不会使浏览器崩溃