我正在使用遍历搜索结果列表的javascript循环(使用),通过添加围绕搜索命中setInterval
的css来突出显示搜索词。<span>
我setInterval
这样做是为了释放对浏览器的控制。
在 Chrome 和 Firefox 中这很有效——即使 setInterval 参数为 10-20ms;并且用户可以完全控制浏览器(即滚动、点击链接等),同时快速突出显示结果:
mylooper = setInterval(function() {
// my functionality is here
},15); // 15ms
不幸的是,当使用可怕的 IE8 时,浏览器会被锁定并且需要很长时间才能添加<span>
's 和设置搜索结果的样式。首先加载页面也需要很长时间 - 删除此脚本后大大缩短了时间。
到目前为止,我已经尝试过:
- 更改间隔值(我读过 IE8 没有检测到低于 15 毫秒的间隔);
- 使用
setTimeout
而不是 setInterval; - 删除间隔以检查这实际上是导致减速的原因(它是!);和
咒骂 Internet Explorer 很多;
var highlightLoop; var index = 0; highlightLoop = setInterval(function () { var regex = RegExp(regexPhrase, "gi"); // regexPhase created elsewhere var searchResults = resultElements.eq(index).get(0); // run through resultElements which contain alll the nodes with search results in them. findAndReplaceDOMText( // a function that does the searching and inserting of styling regex, searchResults, function (fill, matchIndex) { called = true; var span = document.createElement("span"); span.className = "result-highlight"; span.innerHTML = fill; return span; } ); if (index == resultElements.length || searchTermUpdated == true) { // stop interval loop when search term changes or we reach the end of results - variable set elsewhere. searchTermUpdated = false; clearInterval(highlightLoop); // stop the loop } index++ } }, 50); // 50ms does not improve performance.
任何关于 IE 中这种 javascripting 的变通方法的建议都将不胜感激。谢谢大家。