最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

html实现高亮关键字

来源:动视网 责编:小采 时间:2020-11-03 18:16:46
文档

html实现高亮关键字

html实现高亮关键字:正则优化一:仅处理位于标签内的元素var formatKeyword = text.replace(/[-\/\\^$*+。()|[\]{}]/g, '\\$&') // 转义处理keyword包含的特殊字符,如 /. var finder = new RegExp(">.*"
推荐度:
导读html实现高亮关键字:正则优化一:仅处理位于标签内的元素var formatKeyword = text.replace(/[-\/\\^$*+。()|[\]{}]/g, '\\$&') // 转义处理keyword包含的特殊字符,如 /. var finder = new RegExp(">.*"


正则优化一:仅处理位于标签内的元素

var formatKeyword = text.replace(/[-/\^$*+?.()|[]{}]/g, '\$&') // 转义处理keyword包含的特殊字符,如 /.
var finder = new RegExp(">.*?"++".*?<") // 提取位于标签内的文本,避免误操作 class、id 等
 
element.innerHTML = element.innerHTML.replace(finder,function(matched){
 return matched.replace(text,"<br>"+text+</br>)
})// 对提取的标签内文本进行关键字替换

以能解决大多数问题,但依旧存在的问题是,只要标签属性存在类似 < 符号,将会打破匹配规则导致正则提取内容错误, HTML5 dataset 可以自定义任意内容,故这些特殊字符是无法避免的。

<div dataset="p>d">替换</div>

(推荐教程:html教程)

正则优化二:清除可能影响的标签

<div id="keyword">keyword</div>
 =》将闭合标签用变量替换
 [replaced1]keyword[replaced2]//闭合标签内 id="keyword" 不会被处理
 =》
 [replaced1]<b>keyword</b>[replaced2]
 =》将暂存变量 replaced 替换为原先标签
 <div id="keyword"><b>keyword</b></div>

问题:如果 [replaced1] 包含 keyword, 那么替换时将发生异常。

最重要的,当标签值中包含 <> 符号时,此方法也不能正确的提取标签。

总之在经过了N多尝试之后,通过正则都没能有效的处理各种情况。然后换了个思路,不通过字符串的方式,通过节点处理。element.childNodes 可以最有效的清理标签内的干扰信息。

[完美解决方案]通过 DOM 节点处理

<div id="parent">
 keyword 1
 <span id="child">
 keyword 2
 </span>
 </div>

通过 parent.childNodes 得到所有子节点。child 节点可以通过 innerText.replce(keyword,result) 的方式替换得到想要的高亮效果,如下: <span id="child"><b>keyword</b> 2</span> (递归处理:当child节点不含子节点时进行replace操作)。

但是 keyword 1 是属于文本节点,只能修改文本内容,无法增加 HTML,更无法单独控制其样式。而文本节点也不能转换为普通节点。

更多编程相关内容,请关注Gxlcms编程入门栏目!

文档

html实现高亮关键字

html实现高亮关键字:正则优化一:仅处理位于标签内的元素var formatKeyword = text.replace(/[-\/\\^$*+。()|[\]{}]/g, '\\$&') // 转义处理keyword包含的特殊字符,如 /. var finder = new RegExp(">.*"
推荐度:
标签: 关键字 实现 html
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top