Vue實(shí)現(xiàn)多個(gè)關(guān)鍵詞高亮顯示功能
在現(xiàn)代網(wǎng)頁(yè)開(kāi)發(fā)中,常常需要實(shí)現(xiàn)高亮顯示關(guān)鍵詞的功能。例如,在一個(gè)搜索結(jié)果頁(yè)面,用戶可能輸入某個(gè)關(guān)鍵詞,并希望看到該關(guān)鍵詞在相關(guān)內(nèi)容中的高亮顯示。下面我們將探討如何通過(guò) JavaScript 來(lái)實(shí)現(xiàn)這一功能,具體以 Vue.js 中的 highlightText
方法為例。
1. 理解 escapeRegExp 方法
escapeRegExp
是一個(gè)將特殊字符轉(zhuǎn)義為正則表達(dá)式安全字符的函數(shù)。正則表達(dá)式中有許多特殊字符,例如 .
、*
、+
等,這些字符在正則中有特定的含義。如果我們希望這些字符作為普通字符進(jìn)行匹配,就需要對(duì)它們進(jìn)行轉(zhuǎn)義。
escapeRegExp(str) { return str.replace(/([.*+?^=!:${}()|[]/\])/g, '\$1'); }
此方法使用了正則表達(dá)式,將輸入字符串中的特殊字符(如 *
、+
、?
等)替換為它們的轉(zhuǎn)義字符(如 *
、+
、?
)。這確保了我們可以在正則表達(dá)式中安全地使用用戶輸入的任何字符串,無(wú)論其是否包含特殊字符。
2. 高亮顯示文本的核心方法
highlightText
方法的核心作用是根據(jù)用戶輸入的關(guān)鍵詞在文本中查找并高亮顯示匹配項(xiàng)。它使用了前面提到的 escapeRegExp
方法來(lái)確保每個(gè)關(guān)鍵詞都被正確轉(zhuǎn)義,然后利用正則表達(dá)式實(shí)現(xiàn)高亮功能。
highlightText(fieldValue) { const keyword = this.queryParams.keyword || ''; if (!keyword) return fieldValue; const keywords = keyword.split(''); if (keywords.length === 0 || !fieldValue) return fieldValue; const regexString = keywords.map(keyword => `(${this.escapeRegExp(keyword)})`).join('|'); const regex = new RegExp(regexString, 'gi'); return fieldValue.replace(regex, (match) => { return `<span class="highlight">${match}</span>`; }); }
代碼解析:
獲取關(guān)鍵詞:首先從 queryParams
中獲取用戶輸入的關(guān)鍵詞(this.queryParams.keyword
)。如果沒(méi)有輸入關(guān)鍵詞,則直接返回原始文本。
拆分關(guān)鍵詞:將輸入的關(guān)鍵詞按字符拆分成數(shù)組。如果拆分后的數(shù)組為空或 fieldValue
本身為空,直接返回原始文本。
生成正則表達(dá)式:使用 map
方法將每個(gè)字符轉(zhuǎn)義,并將所有轉(zhuǎn)義后的字符拼接成一個(gè)大的正則表達(dá)式字符串。這里使用了 |
來(lái)分隔每個(gè)字符,表示“或”操作,即如果文本中出現(xiàn)任何一個(gè)關(guān)鍵詞字符,都會(huì)被匹配。
正則替換:通過(guò) replace
方法,使用 span
標(biāo)簽包裹所有匹配的字符,以實(shí)現(xiàn)高亮顯示。'gi'
標(biāo)志表示全局匹配且不區(qū)分大小寫(xiě)。
返回高亮后的文本:將高亮后的文本作為 HTML 返回,可以直接插入到頁(yè)面中。
3. 如何使用 highlightText
假設(shè)我們有一個(gè) Vue.js 組件,它展示了一段文本,并希望在文本中高亮顯示用戶輸入的關(guān)鍵詞??梢赃@樣調(diào)用 highlightText
方法:
<template> <div v-html="highlightText('這是一個(gè)測(cè)試文本,測(cè)試關(guān)鍵字高亮顯示')"></div> </template> <script> export default { data() { return { queryParams: { keyword: '測(cè)試' } }; }, methods: { escapeRegExp(str) { return str.replace(/([.*+?^=!:${}()|[]/\])/g, '\$1'); }, highlightText(fieldValue) { const keyword = this.queryParams.keyword || ''; if (!keyword) return fieldValue; const keywords = keyword.split(''); if (keywords.length === 0 || !fieldValue) return fieldValue; const regexString = keywords.map(keyword => `(${this.escapeRegExp(keyword)})`).join('|'); const regex = new RegExp(regexString, 'gi'); return fieldValue.replace(regex, (match) => { return `<span class="highlight">${match}</span>`; }); } } }; </script> <style scoped> .highlight { background-color: yellow; } </style>
在這個(gè)示例中,我們通過(guò) v-html
指令將高亮后的文本渲染到頁(yè)面中,并通過(guò) CSS 設(shè)置高亮的背景顏色。用戶輸入的關(guān)鍵詞 測(cè)試
會(huì)在文本中被高亮顯示。
4. 總結(jié)
通過(guò)以上的方法,我們能夠方便地實(shí)現(xiàn)一個(gè)高亮顯示關(guān)鍵詞的功能,無(wú)論是用于搜索結(jié)果展示,還是其他需要文本高亮的場(chǎng)景。這種方式不僅支持簡(jiǎn)單的字符高亮,還能正確處理用戶輸入的特殊字符,保證功能的魯棒性和安全性。
到此這篇關(guān)于Vue實(shí)現(xiàn)多個(gè)關(guān)鍵詞高亮顯示功能的文章就介紹到這了,更多相關(guān)Vue關(guān)鍵詞高亮內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue實(shí)現(xiàn)關(guān)鍵字高亮效果的示例代碼
- vue3關(guān)鍵字高亮指令的實(shí)現(xiàn)詳解
- 如何使用Vue3實(shí)現(xiàn)文章內(nèi)容中多個(gè)"關(guān)鍵詞"標(biāo)記高亮顯示
- vue實(shí)現(xiàn)搜索關(guān)鍵詞高亮的詳細(xì)教程
- vue實(shí)現(xiàn)多組關(guān)鍵詞對(duì)應(yīng)高亮顯示功能
- Vue實(shí)現(xiàn)搜索結(jié)果高亮顯示關(guān)鍵字
- 基于Vue實(shí)現(xiàn)關(guān)鍵詞實(shí)時(shí)搜索高亮顯示關(guān)鍵詞
相關(guān)文章
vue中使用better-scroll實(shí)現(xiàn)滑動(dòng)效果及注意事項(xiàng)
這篇文章主要介紹了vue中使用better-scroll實(shí)現(xiàn)滑動(dòng)效果,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11vue限制文本輸入框只允許輸入字母、數(shù)字、禁止輸入特殊字符
這篇文章主要介紹了vue限制文本輸入框只允許輸入字母、數(shù)字、不允許輸入特殊字符,通過(guò)監(jiān)聽(tīng)表單輸入的內(nèi)容,使用方法的缺陷,本文通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友參考下吧2023-10-10利用vuex-persistedstate將vuex本地存儲(chǔ)實(shí)現(xiàn)
這篇文章主要介紹了利用vuex-persistedstate將vuex本地存儲(chǔ)的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04詳解element-ui表格中勾選checkbox,高亮當(dāng)前行
這篇文章主要介紹了詳解element-ui表格中勾選checkbox,高亮當(dāng)前行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Vue實(shí)現(xiàn)dom元素拖拽并限制移動(dòng)范圍的操作代碼
這篇文章主要介紹了Vue實(shí)現(xiàn)dom元素拖拽并限制移動(dòng)范圍的操作代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-12-12element-ui中Table表格省市區(qū)合并單元格的方法實(shí)現(xiàn)
這篇文章主要介紹了element-ui中Table表格省市區(qū)合并單元格的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08