mark.js是用JavaScript编写的文本荧光笔。
它可以用来动态标记搜索词或自定义正则表达式,并为您提供内置的选项,如变音符号支持,单词搜索,自定义同义词,iframe支持,自定义过滤器,准确性定义,自定义元素,自定义类名称等。
下载
1 | npm install mark.js --save |
兼容
- Firefox (30+)
- Chrome (30+)
- Safari (7+)
- Edge (13+)
- IE (9+)
定义样式
可以自定义高亮的样式
1 | mark{ |
使用
定义
1 | var instance = new Mark(context); |
context 是要匹配的内容:可以是一个节点, 也可以是一个nodelist, 来个🌰:
1 | var instance = new Mark(document.querySelector("div.context")); |
标记
1 | this.instance.mark('mark'); // 标记指定元素中所有mark |
instance.mark(keyword [, options]); 可以通过options实现更丰富的功能
标记正则匹配部分
1 | instance.markRegExp(regexp [, options]); |
移除高亮
1 | instance.unmark(options); |
options详解:
1 | var options = { |
官网地址 https://markjs.io/
与angular2+出现的问题
在对高亮部分的双向绑定的值改变时,会出现重复高两部分
我觉得导致这个问题是因为mark给高亮的部分加了自己的标签,如:, 所以angular自己的双向绑定的值不在是原来的值了.
解决方案:
1 | this.marker.unmark() // 取消高亮 |
过程中试过直接重新高亮, 但是没有效果. 加了setTimeout把高亮放到这次轮训的最后, 有效. (个人觉得是因为优先处理了高亮才进行双向绑定的渲染, 所以没有生效)
使用管道实现
采用自定义管道实现高亮的效果
1 | import {Pipe, Injectable, PipeTransform} from '@angular/core'; |
使用
1 | <span [innerHTML]="name|keyword:keyword"></span> |