vue使用advanced-mark.js實(shí)現(xiàn)高亮文字效果
組件介紹-advanced-mark.js:
advanced-mark.js 是一個(gè)用于 Vue 的高亮文字組件,它可以幫助你在文本中高亮顯示指定的關(guān)鍵詞或短語(yǔ)。組件地址:https://angezid.github.io/advanced-mark.js/doc-v2/getting-started.html
- 主要功能:
- 關(guān)鍵詞高亮:在文本中高亮顯示一個(gè)或多個(gè)關(guān)鍵詞
- 多關(guān)鍵詞支持:可以同時(shí)高亮多個(gè)不同的關(guān)鍵詞
- 自定義樣式:允許自定義高亮部分的樣式
- 大小寫(xiě)敏感選項(xiàng):可選擇是否區(qū)分大小寫(xiě)
- 正則表達(dá)式支持:支持使用正則表達(dá)式進(jìn)行復(fù)雜匹配
- 可以設(shè)置css名稱進(jìn)行限制高亮區(qū)域
下載安裝:
npm install advanced-mark.js
或
yarn add advanced-mark.js
要初始化新實(shí)例,必須使用:
var instance = new Mark(context);
instance.mark('lorem');
使用方法介紹:
- element 【string】:獲取document,通過(guò)document.getElementById()或document.querySelector()獲取的單個(gè)元素,或document.querySelectorAll()獲取節(jié)點(diǎn)列表,包含多個(gè)單個(gè)元素的數(shù)組(請(qǐng)注意,在內(nèi)部,數(shù)組按元素在文檔中的位置排序)
字符串選擇器(內(nèi)部調(diào)用document.querySelectorAll())
例:const allNodes =document.querySelectorAll(selector)); - className 【string】:標(biāo)記元素的自定義類。
- separateWordSearch【boolean or string】:當(dāng)它設(shè)置為true時(shí),如果搜索字符串包含多個(gè)單詞,它會(huì)將字符串按空格拆分為單獨(dú)的單詞,并突出顯示單個(gè)單詞而不是整個(gè)字符串。
它也適用于搜索數(shù)組中的每個(gè)字符串。
當(dāng)它設(shè)置為“separateWordSearch ”時(shí),它會(huì)保留雙引號(hào)周圍的術(shù)語(yǔ),防止它們分成單獨(dú)的單詞。
當(dāng)設(shè)置為‘false’的時(shí)候,指定將術(shù)語(yǔ)不分解為單獨(dú)的單詞。 - diacritics【boolean】:是否匹配變音字符。
- caseSensitive【boolean】:是否搜索區(qū)別大小寫(xiě)。
- accuracy【string or object】:兩種模式值,
-字符串模式:
partially:部分匹配,例如搜索"a"時(shí),會(huì)高亮所有包含該字母的單詞(如"and"、“back"中 的"a”)。
exactly:強(qiáng)制精確匹配,默認(rèn)通過(guò)空格或文本節(jié)點(diǎn)的起止位置作為邊界(需配合acrossElements選項(xiàng)使用)。
startsWith:前綴匹配,例如搜索"pre"會(huì)完整高亮以該前綴開(kāi)頭的單詞(如"prefix"、“predict”)。
complementary:互補(bǔ)匹配,例如搜索"a"時(shí),僅高亮完整包含該字符且未被邊界分隔的單詞(如"and"、“visa”)。
-對(duì)象模式:
通過(guò) value 指定匹配模式(必須為上述四個(gè)字符串值之一)
通過(guò) limiters 自定義邊界字符,例如:{ value: "exactly", limiters: ",.;:?!'\"()" } - wildcards【string】:匹配空格,enabled 模式忽略空格;withSpaces 模式允許空格作為有效字符;disabled 完全禁用通配符功能;
- ignoreJoiners【boolean】:是否查找包含軟連字符、零寬度空格、零寬度非連接符和零寬度連接符的匹配項(xiàng)。
- synonyms【object】:該對(duì)象用于建立詞匯間的雙向/單向關(guān)聯(lián)關(guān)系,支持兩種配置形式:
- each:每個(gè)標(biāo)記元素的回調(diào)。
例:each: function (markElement, eachInfo) { // markElement:當(dāng)前被高亮的 DOM 元素。 // eachInfo:包含匹配信息的對(duì)象,其中 eachInfo.match[0] 是匹配到的關(guān)鍵詞 const keyword = eachInfo.match[0]; markElement.style.backgroundColor = keywordColors[keyword] || '#FBD1D5'; }
注: 如果想要多個(gè)部分分散使用高亮功能,那么可以使用數(shù)組形式進(jìn)行存儲(chǔ),并遍歷循環(huán)。
const classNames=['.css1','.css2','.css3',...]
const allNodes = classNames.flatMap((selector) =>
document.querySelectorAll(selector));
allNodes.forEach((node) => {
// 在指定的 DOM 元素中查找并高亮指定的關(guān)鍵詞
const instance = new Mark(node); //new一個(gè)新對(duì)象
instance.unmark(); // 清除之前的標(biāo)記
instance.mark(highlightKeywords[注:接受高亮詞的數(shù)組], {
separateWordSearch: false, // false指定將術(shù)語(yǔ)不分解為單獨(dú)的單詞
each: function (markElement, eachInfo) {
// markElement:當(dāng)前被高亮的 DOM 元素。
// eachInfo:包含匹配信息的對(duì)象,其中 eachInfo.match[0] 是匹配到的關(guān)鍵詞
const keyword = eachInfo.match[0];
markElement.style.backgroundColor =
keywordColors[keyword] || '#FBD1D5';// 設(shè)置顏色和默認(rèn)顏色
}
});
});
組件產(chǎn)出效果:


總結(jié)
到此這篇關(guān)于vue使用advanced-mark.js實(shí)現(xiàn)高亮文字效果的文章就介紹到這了,更多相關(guān)vue高亮文字效果內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue2.0實(shí)現(xiàn)音樂(lè)/視頻播放進(jìn)度條組件
這篇文章主要為大家詳細(xì)介紹了vue2.0實(shí)現(xiàn)音樂(lè)和視頻播放進(jìn)度條組件的思路及具體實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
vue+echarts實(shí)現(xiàn)條紋柱狀橫向圖
這篇文章主要為大家詳細(xì)介紹了vue+echarts實(shí)現(xiàn)條紋柱狀橫向圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
vue-cli3 karma單元測(cè)試的實(shí)現(xiàn)
這篇文章主要介紹了vue-cli3 karma單元測(cè)試的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
詳解input組合事件如何監(jiān)聽(tīng)輸入中文
這篇文章主要為大家介紹了input組合事件如何監(jiān)聽(tīng)輸入中文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Vue中video標(biāo)簽如何實(shí)現(xiàn)不靜音自動(dòng)播放
最近在做大屏展示需要在一開(kāi)始播放引導(dǎo)視頻,產(chǎn)生自動(dòng)播放需求,下面這篇文章主要給大家介紹了關(guān)于Vue中video標(biāo)簽如何實(shí)現(xiàn)不靜音自動(dòng)播放的相關(guān)資料,需要的朋友可以參考下2023-01-01
vue使用?vue-socket.io三種方式及踩坑實(shí)例解析
這篇文章主要為大家介紹了vue使用?vue-socket.io三種方式及踩坑實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
JavaScript之Vue.js【入門(mén)基礎(chǔ)】
本文主要介紹一下Vue.js并附上在Node.js環(huán)境下搭建一個(gè)簡(jiǎn)單的Demo實(shí)例代碼。條理清晰,有助于閱讀和理解。有需要的朋友可以看下2016-12-12
Vue發(fā)布訂閱模式實(shí)現(xiàn)過(guò)程圖解
這篇文章主要介紹了Vue發(fā)布訂閱模式實(shí)現(xiàn)過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04

