javascript - 在 html 文档中突出显示不同字符串的最快方法是什么?

标签 javascript jquery html performance highlight

我正在尝试在 html 页面中搜索字符串,我有一个包含 1000 个名称的对象,我需要查找这些名称是否存在于 html 文档中。如果它们确实存在,那么我需要将它们包装在跨度或其他东西中并应用一个类。

我一直在用这个jQuery Highlight Plugin但扫描并突出显示整个页面大约需要 17 秒,这显然取决于页面上有多少个不同的名称。

我尝试了一些不同的插件,但没有找到更快的插件,有没有一种方法可以在 vanilla JS 中更快地做到这一点?它只需要在 Chrome 中工作。

任何帮助将不胜感激。

谢谢

编辑:保存名称的对象的结构:

var 人 = { “弗雷德”:{ 已加载:假, 元素:[] }, “戴夫”:{ 已加载:假, 元素:[] }, “鲍勃”:{ 已加载:假, 元素:[] } }

最佳答案

纯 JavaScript。

基本上,我会遍历您的对象并提取所有相关名称。一旦我有了这个,我将数组传递给highlightString函数,在其中我将所有想要与管道字符匹配的字符串连接起来,并创建一个全局运行并忽略大小写的正则表达式。这会导致正在搜索的 div 只被搜索一次。这应该会带来相当大的加速。

var PEOPLE = {
  "fred" : {
    loaded : false,
    elements : []
  },
  "dave" : {
    loaded : false,
    elements : []
  },
  "bob" : {
    loaded : false,
    elements : []
  }
},
name,
search = [];

for (name in PEOPLE) {
  search.push(name);
}    

function highlightStrings(input, toMatch) {
  var reg = new RegExp('(' + toMatch.join('|') + ')', "gi");
  input.innerHTML = input.innerHTML.replace(reg, '<span class="myHighLight">$1</span>');  
}

highlightStrings(document.getElementById("test"), search);
.myHighLight {background-color:yellow;}
<div id="test">
  test1 test2 fred test4 test5 test6 test7 test8 dave test10 test11 test12 bob test14 test15
</div>

关于javascript - 在 html 文档中突出显示不同字符串的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27371718/

相关文章:

javascript - Svelte 组件可以访问 DOM 元素来获取其槽内容吗?

javascript - 将文本放入第二个输入

javascript - 使用 JavaScript 将图像加载到 Canvas 上

javascript - HTML5 视频在 Safari 中不工作

javascript - 如何使用 wp_localize_script 更改 JavaScript 项目数组

javascript - 观看 './**/*.js' 会导致 CPU 使用率过高

javascript - Jquery - 在追加元素上插入值

javascript - 如何在 JQuery DataTable 中单击按钮时显示警报?

javascript - 使用 JavaScript 保护 html 页面上的元素数据

javascript - 如何在 CakePHP 中添加 onChange 事件来选择标签?