【发布时间】:2012-09-12 09:42:58
【问题描述】:
我们需要为html页面中的一些关键字/句子添加锚点和高亮。事实证明,在 Firefox 中突出显示真的很慢。
在下面的代码中,所有需要高亮的范围都存储在数组hiliteRanges中:
for (var i = 0; i < hiliteRanges.length; i++){
document.designMode = "on";
var selHilites = window.getSelection();
if (selHilites.rangeCount > 0)
selHilites.removeAllRanges();
selHilites.addRange(hiliteRanges[i]);
var anchorId = 'index'+i;
var insertedHTML = '<span id="' + anchorId + '" style="background-color: #FF8C00;" >'+hiliteRanges[i].toString()+'</span>';
document.execCommand('inserthtml', false, insertedHTML);
document.designMode = "off";
}
有什么方法可以加快处理速度吗?我们可以在数组hiliteRanges 中有数百个范围。我们曾经尝试将designMode 设置移到循环之外,但我们可以看到循环运行时html页面中的某些部分是可编辑的。
【问题讨论】:
-
相关:Javascript: document.execCommand cross-browser? 为什么不用
contentEditable?或者这是否与designMode方法有关? -
这是对您正在做的事情的适当演示吗? jsfiddle.net/userdude/cHCcm/1
-
其实我是先用FF的window.find方法搜索关键字,把所有选中的范围存入数组hiliteRanges。然后我想在 FF 中突出显示所有这些选定的范围。我可以在这些选定的范围内使用 contentEditable 吗?
-
firefox 上的 javascript 引擎比 ie 和 chrome 都慢,你遇到的问题纯粹是处理太多。将尽可能多的代码移到 for 循环之外,并尽可能地重构代码。
-
@SaintGerbil 这与 JavaScript 无关;真正的问题是反复打开和关闭所有编辑机器。另外要注意的是,Firefox 中的 JS 引擎实际上比 IE 更快,并且与 Chrome 差不多,这取决于你用它做什么。
标签: javascript html firefox range highlighting