關(guān)鍵詞高亮效果

分享一個(gè)常用的的小功能:輸入關(guān)鍵詞东羹,在列表中高亮顯示輸入的關(guān)鍵詞糜值。如:

效果.gif

實(shí)現(xiàn)步驟

1. 思路

讓選中的關(guān)鍵字高亮顯示丰捷,說明要給關(guān)鍵字添加標(biāo)簽坯墨,然后給相應(yīng)標(biāo)簽添加樣式。因此關(guān)鍵之處就在于:

  1. 匹配關(guān)鍵字
  2. 替換關(guān)鍵字為帶有標(biāo)識(shí)(標(biāo)簽)的關(guān)鍵字
  3. 給標(biāo)識(shí)(標(biāo)簽)添加樣式

2. 示例

以vue項(xiàng)目示例

2.1 基礎(chǔ)布局

<!-- html -->

<!-- 關(guān)鍵詞輸入框 -->
<div class="search">
    <el-input placeholder="請輸入關(guān)鍵詞" prefix-icon="el-icon-search"></el-input>
</div>
<!-- 內(nèi)容區(qū)域: 內(nèi)容列表循環(huán)展示 -->
<div class="article">
    <div v-for="(item, index) in needText" :key="index" v-html="item.text"></div>
</div>
// 數(shù)據(jù)
data() {
    return {
        // 關(guān)鍵詞
        keyword: '',
        // 原數(shù)據(jù)列表
        texts: [
            {text: '春江潮水連海平病往,海上明月共潮生捣染。'},
            {text: '滟滟隨波千萬里,何處春江無月明停巷!'},
            {text: '江流宛轉(zhuǎn)繞芳甸耍攘,月照花林皆似霰;'},
            {text: '空里流霜不覺飛畔勤,汀上白沙看不見蕾各。'},
            {text: '江天一色無纖塵,皎皎空中孤月輪庆揪。'},
            {text: '江畔何人初見月示损?江月何年初照人?'},
            {text: '人生代代無窮已嚷硫,江月年年望相似检访。'},
            {text: '不知江月待何人,但見長江送流水仔掸。'},
            {text: '白云一片去悠悠脆贵,青楓浦上不勝愁。'},
            {text: '誰家今夜扁舟子起暮?何處相思明月樓卖氨?'},
            {text: '可憐樓上月裴回,應(yīng)照離人妝鏡臺(tái)负懦。'},
            {text: '玉戶簾中卷不去筒捺,搗衣砧上拂還來。'},
            {text: '此時(shí)相望不相聞纸厉,愿逐月華流照君系吭。'},
            {text: '鴻雁長飛光不度,魚龍潛躍水成文颗品。'},
            {text: '昨夜閑潭夢落花肯尺,可憐春半不還家。'},
            {text: '江水流春去欲盡躯枢,江潭落月復(fù)西斜则吟。'},
            {text: '斜月沉沉藏海霧,碣石瀟湘無限路锄蹂。'},
            {text: '不知乘月幾人歸氓仲,落月?lián)u情滿江樹。'}
        ],
        // 處理后的數(shù)據(jù)列表,要展示到html中去的
        needText: [],
    }
}

// 初始化
mounted() {
    // 初始化時(shí)敬扛,將原數(shù)據(jù)列表賦值給needText一份晰洒,做初始化的展示
    this.needText = this.texts;
}

然后布局居中即可。完成后如下:

布局完成

2.2 綁定關(guān)鍵詞舔哪,做關(guān)鍵詞替換

將輸入內(nèi)容綁定到 keyword欢顷,添加回車事件

<el-input 
    placeholder="請輸入關(guān)鍵詞"
    prefix-icon="el-icon-search"
+   v-modal="keyword"
+   @keyup.enter.native="alternateText"
    >
</el-input>

剛才說過槽棍,做關(guān)鍵詞替換捉蚤,其實(shí)就是將關(guān)鍵詞替換為帶有標(biāo)簽的關(guān)鍵詞,那么可以根據(jù)正則將文字替換炼七。

先來搞一下關(guān)鍵詞和將關(guān)鍵詞帶上標(biāo)簽:

// 正則缆巧,全局
let exp = new RegExp(this.keyword, 'g');
// 帶有標(biāo)簽的關(guān)鍵詞,此處使用 span 標(biāo)簽豌拙,也可以是其他標(biāo)簽
let node = `<span>${this.keyword}</span>`;

正則替換:

// 遍歷原數(shù)據(jù)數(shù)組陕悬,將替換后的塞到 needText 中去展示即可
this.texts.map((item, index) => {
    item = item.text.replace(exp,node);
    this.needText.push({text: item});
});

注:在替換之前要先將 needText 清空。

將以上兩步封裝成alternateText方法即可按傅。也就是在方法內(nèi)部先將 needText 清空捉超,然后正則全局替換關(guān)鍵詞為帶有 span 標(biāo)簽的關(guān)鍵詞。

檢驗(yàn):是否帶有 span 標(biāo)簽:

檢驗(yàn)span

2.3 將帶標(biāo)簽的關(guān)鍵詞添加樣式

既然標(biāo)簽有了唯绍,那么添加樣式即可拼岳。比如我此處的 class 是 "article",那么我可以:

.article{
    width: 100%;
    margin: 50px auto;
    &>div{
        text-align: center;
        margin: 15px 0;
+       span{
+           color: orange;
+       }
    }
}

然后嘗試一下……發(fā)現(xiàn)并沒有加上去顏色况芒!

不賣關(guān)子了惜纸,正確的處理方式是:

.article{
    width: 100%;
    margin: 50px auto;
    &>div{
        text-align: center;
        margin: 15px 0;
-       span{
+       &::v-deep span{
            color: orange;
        }
    }
}

v-deep 小妙招~

OK,重新檢驗(yàn)下:

完成

搞定~收工绝骚!

完整代碼私信我獲取~

小結(jié)

其實(shí)做完后發(fā)現(xiàn)還是挺簡單的耐版,一個(gè)正則替換,將關(guān)鍵字(詞)替換為帶有標(biāo)簽的關(guān)鍵詞压汪,在寫樣式的時(shí)候注意要保證能渲染到 span 標(biāo)簽上即可寥掐。另外需要注意的是最好不要在原數(shù)據(jù)上做修改,不然會(huì)導(dǎo)致系列問題擎鸠,如給原數(shù)據(jù)添加上標(biāo)簽之后可能會(huì)導(dǎo)致后續(xù)的關(guān)鍵詞覆蓋搜索不到等逛拱,因此建議將原數(shù)據(jù)保留,將操作后的數(shù)據(jù)存的新的變量中去滴须。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舌狗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扔水,更是在濱河造成了極大的恐慌痛侍,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異主届,居然都是意外死亡赵哲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門君丁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枫夺,“玉大人,你說我怎么就攤上這事绘闷∠鹋樱” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵印蔗,是天一觀的道長扒最。 經(jīng)常有香客問我,道長华嘹,這世上最難降的妖魔是什么吧趣? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮耙厚,結(jié)果婚禮上强挫,老公的妹妹穿的比我還像新娘。我一直安慰自己薛躬,他們只是感情好俯渤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泛豪,像睡著了一般稠诲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诡曙,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天臀叙,我揣著相機(jī)與錄音,去河邊找鬼价卤。 笑死劝萤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的慎璧。 我是一名探鬼主播床嫌,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胸私!你這毒婦竟也來了厌处?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤岁疼,失蹤者是張志新(化名)和其女友劉穎阔涉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瑰排,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年贯要,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椭住。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崇渗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出京郑,到底是詐尸還是另有隱情宅广,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布傻挂,位于F島的核電站乘碑,受9級特大地震影響挖息,放射性物質(zhì)發(fā)生泄漏金拒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一套腹、第九天 我趴在偏房一處隱蔽的房頂上張望绪抛。 院中可真熱鬧,春花似錦电禀、人聲如沸幢码。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽症副。三九已至,卻和暖如春政基,著一層夾襖步出監(jiān)牢的瞬間贞铣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工沮明, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辕坝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓荐健,卻偏偏與公主長得像酱畅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子江场,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容