返回

HTML高亮关键字?是小意思!

前端

在网页中高亮,本以为一个简单的innerHTML替换就能实现,但实际上却遇到了许多问题。本文将记录这些问题和最终的完美解决办法,希望能对有同样遭遇的小伙伴有所帮助。只对结果感兴趣的,可以直接跳过过程,直接看结果。

问题

1. 关键词可能出现在HTML标签内

如果关键词出现在HTML标签内,直接替换innerHTML会破坏HTML结构,导致页面显示异常。

2. 关键词可能出现在脚本代码内

如果关键词出现在脚本代码内,直接替换innerHTML也会破坏脚本代码,导致脚本无法正常运行。

3. 关键词可能出现在样式代码内

如果关键词出现在样式代码内,直接替换innerHTML也会破坏样式代码,导致页面样式错乱。

4. 关键词可能出现在注释内

如果关键词出现在注释内,直接替换innerHTML也会破坏注释,导致页面显示异常。

解决办法

1. 使用正则表达式匹配关键词

可以使用正则表达式来匹配关键词,这样可以避免破坏HTML结构、脚本代码、样式代码和注释。

2. 使用DOM操作来替换关键词

可以使用DOM操作来替换关键词,这样可以更精确地控制替换的位置。

3. 使用闭包来保存关键词

可以使用闭包来保存关键词,这样可以在不同的函数中使用相同的关键词。

最终的解决方案

function highlightKeyword(keyword) {
  // 使用正则表达式匹配关键词
  var regex = new RegExp(keyword, "gi");

  // 使用闭包来保存关键词
  var closure = (function (keyword) {
    return function (node) {
      // 使用DOM操作来替换关键词
      node.innerHTML = node.innerHTML.replace(regex, "<span style='background-color: yellow'>" + keyword + "</span>");
    };
  })(keyword);

  // 遍历所有节点,并使用闭包来替换关键词
  document.querySelectorAll("*").forEach(closure);
}

// 使用函数来高亮关键词
highlightKeyword("关键词");

结果

使用上面的解决方案,可以在网页中完美地高亮关键词,而不会破坏HTML结构、脚本代码、样式代码和注释。

结语

在网页中高亮关键词看似简单的操作,但实际上却暗藏玄机。本文详细记录了遇到的问题和最终的完美解决办法,希望能对有同样遭遇的小伙伴有所帮助。如果您有更好的解决方案,欢迎在评论区留言分享。