最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用Vue3實現(xiàn)文章內(nèi)容中多個"關鍵詞"標記高亮顯示

 更新時間:2022年11月12日 10:15:47   作者:橙某人  
高亮顯示是我們?nèi)粘i_發(fā)中經(jīng)常會遇到的需求,下面這篇文章主要給大家介紹了關于如何使用Vue3實現(xiàn)文章內(nèi)容中多個"關鍵詞"標記高亮顯示的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

寫在開頭

話說在某一天,小編正沉迷于掘金沸點中摸魚,正起勁呢,產(chǎn)品小姐姐突然就跑過來,說時遲那時快,我一個閃電五連鞭,立馬把屏幕切換成代碼編輯器,絕不能讓人看出我沒需求了在摸魚。

然后小姐姐巴拉巴拉講了一堆,就是想加個"小"需求,小編當場就表現(xiàn)得很為難的樣子。

十分正經(jīng)溫柔的對小姐姐說:"你看,我這還有需求沒做完呢,分身乏術,再說你這個需求有點麻煩啊,沒有一兩周搞不定的"。

但實際小編心中暗自竊喜,這需求不難,一個小時能搞定,多一秒都算我輸(?ω?)。

不過職場的"人情世故"咱得懂,低調(diào)行事,多給自己爭取一點摸魚時間。

小姐姐:"行吧,你盡快做就行,需求也不是很趕"。

這波又成功忽悠了一些摸魚時間,當然,主要還是公司業(yè)務一直都是不緊不慢,找公司還得找這種的,公司業(yè)務不急,不加班,產(chǎn)品好說話,不投毒,這就是我的夢中情司。

好了好了,稍微廢話了一下,咱回歸正題來介紹一下具體需求,需求大概過程就是"把一篇文章的關鍵字標記高亮顯示",你沒聽錯,就是這么簡單。

當然,具體還有一些小細節(jié):

  • 關鍵字由后端接口返回,會有多個關鍵字。
  • 關鍵字不區(qū)分大小寫。
  • 統(tǒng)計關鍵字在文中的個數(shù)。
  • 高亮樣式需要使用UI提供的樣式。
  • ...

具體實現(xiàn)過程

以上這個需求,其實本質(zhì)就是瀏覽器的搜索功能,也算是一個比較常見的功能了,記得在 Vue2 有很多插件包可以來快速實現(xiàn)這個功能。奈何小編的項目是 Vue3+TS 的(︶︹︺),不過網(wǎng)上"輪子"很多,經(jīng)過小編的一頓搜索尋找,果然就找到一個插件挺符合我的需要,下面就來稍微介紹介紹它。

vue-word-highlighter 是一個小眾的包,并不出名,Github 上也只會百星出頭,不過能用能跑就行,合適才是最好的,小編最近信奉一句話"程序和你一個能跑就行"。

vue-word-highlighter 支持 Vue3Vue2,不過 Vue2 版本是通過 vue-demi 構建的,對 vue-demi 不熟悉的小伙伴還是別用吧(?ω?),咱有一說一,用 Vue2 來完成該需求,有其他很多包可以推薦。

至于為什么,正如它文檔介紹的:

基本使用

它的使用比較簡單的,直接上代碼:

<template>
  <div>
    <input v-model="searchValue" /> 
    <button @click="search">search</button> 
    <div>搜索到的個數(shù):{{result.length}}</div>
    <div>搜索到的內(nèi)容:{{result}}</div>
    <br/>
    <WordHighlighter
      highlightClass="highlight"
      :query="lightQuery"
      :caseSensitive="false"
      :splitBySpace="true"
      @matches="lightEmit">
	<div>
	  我已經(jīng)遠離了你的河流,絕不是疏遠,因為我已是身居異土。遠遠地,依然聽得到你翻山越嶺、日夜兼程的腳步聲,依然無比清晰地看得到你的那條灑滿星星的清澈的河流。只要,也只有想起你——故鄉(xiāng),就是異域的那條河流也會灑滿故鄉(xiāng)的星星。無論醒著還是沉睡,都會重復著那個讓人心旌搖曳的畫面,星星都在你的河流里百媚地眨眼。因為那條灑滿星星的河流途經(jīng)我無猜的孩童,無知的少年,迷茫的青春,還要經(jīng)過可知的未來,是不是今后還要交付給大海了呢?那樣,大海的那些星星一定是故鄉(xiāng)送給他們的饋贈,沒有故鄉(xiāng)的孕育,大海也會失去靈氣,因為大海的源頭就在故鄉(xiāng)的這頭……

	  星星的感情,在城市里總是被耽誤。是星星的感情單一,還是城市的濫情呢?如果城市是舞臺,星星就不是市民,所以也不是演員。如果天空是舞臺,星星就是居民,所以能成為明星。如果河流是舞臺,星星就是精靈,她就是大地的靈魂。如今,愛情在城市里就是一個錯誤,比金錢的質(zhì)量輕百倍,所以比海洛因更危險。愛情在鄉(xiāng)村的河流里,就有了星星的光輝,成就的是海枯石爛的傳奇……

	  晴空萬里的白晝,總愛涂脂抹粉打扮一番。這樣的時候,只有清泉敢從濃妝艷抹的云端踏過,只有披著滿身星星的魚兒敢從藍天穿過,將自滿表現(xiàn)的太陽戲弄一番。漿洗的女人們總愛把笑聲拋在河面上,拍打著棒槌當爵士樂的節(jié)拍,委婉的歌聲隨著幸福的河水流淌,斑斕的衣服在白云間飄舞成了彩虹。我聽到了大地與天空的竊語,徹底悟出了薩頂頂唱的《萬物生》里的深刻與凝重:我看見山鷹在寂寞兩條魚上飛 ,兩條魚兒穿過海一樣咸的河水, 一片河水落下來遇見人們破碎 ,人們在行走,身上落滿山鷹的灰……

          睡得沉沉的夜,呵欠連連,漫長得沒有盡頭,無論夜幾多的黑,可故鄉(xiāng)的河流從也不會迷路,因為有星星這明亮的眼睛。你的人生沒有迷路,你的夢沒有迷失方向,你的未來總在奔跑的路上,是不是也是借了故鄉(xiāng)河流里的星星做慧眼呢?如果河流看不到星星,那肯定會落魄的。如果人生看不到那條飄著星星的河流,如果夢里沒有那條飄著星星的河流,如果未來的路上沒有那條飄著星星的河流,你是不是都會驚慌失措呢?陌生人能通過那條河流找到你的家,如果沒有了她你的心能到家嗎?
        </div>
     </WordHighlighter>
  </div>
</template>

<script lang="ts">
import { defineComponent, ref } from "vue";
import WordHighlighter from "vue-word-highlighter";

export default defineComponent({
  name: "App",
  components: {
    WordHighlighter,
  },
  setup() {
    const searchValue = ref<string>();
    const lightQuery = ref<string>();
    const result = ref<Array<string>>([]);

    const search = () => {
      lightQuery.value = searchValue.value;
    };

    const lightEmit = (e: Array<string>) => {
      result.value = e
    }

    return {
        searchValue,
        lightQuery,
        result,
        search,
        lightEmit
    };
  },
});
</script>

<style>
.highlight{
  background-color: transparent;
  color: red;
  font-weight: bold;
}
</style>

是不是超簡單,下面貼一下它支持的一些 props 與事件,就又可以愉快的摸魚了。

props

參數(shù)類型默認值說明
queryString or RegExp-搜索內(nèi)容。
caseSensitiveBooleanfalse是否區(qū)分大小寫。
diacriticsSensitiveBooleanfalse是否區(qū)分變音符號,如 uü。
splitBySpaceBooleanfalse是否用空格分割字符串以使其成為搜索字符串,如果設置為false,則默認把搜索內(nèi)容當成一個整體進行搜索;當 query 為正則時,splitBySpace 默認為 false。
highlightTagString<mark />標記搜索到的內(nèi)容所包裹的標簽。
highlightClassString or Object or Array-給標記的內(nèi)容添加 class,綁定語法類似于 vue 。
highlightStyleString or Object or Array-同上 。
wrapperTagString<span />整個目標搜索區(qū)的容器標簽。
wrapperClassString or Object or Array-給目標搜索區(qū)的容器添加 class,綁定語法類似于 vue 。
textToHighlightStringv-slot:default目標搜索區(qū)的內(nèi)容。

事件

事件名稱說明回調(diào)參數(shù)
matchesquery 參數(shù)變化時觸發(fā),函數(shù)返回搜索到的內(nèi)容function(value:Array<String>)

原理過程

等等?。?!你以為到這里就完了嗎?肯定還沒啦。

作為一名技術人,我們需要知曉其中的原理過程才算合格唷。

小編認真翻了一下 vue-word-highlighter 的源碼,整體源碼內(nèi)容就百來行代碼而已,不算太多,這里我們就不一點點講解了,小編寫個核心方法保準你能懂(不懂來打我呀,略略略)。

function fn(content, keywordArray) {
  if(keywordArray.length === 0) return;

  keywordArray.forEach(keyword => {
    if(keyword && content.indexOf(keyword) !== -1) {
      content = content.replace(new RegExp(keyword, 'g'), `<mark>${keyword}</mark>`);
    }
  });

  return content;
}

好了,到此結束,繼續(xù)摸魚了。

總結

到此這篇關于如何使用Vue3實現(xiàn)文章內(nèi)容中多個"關鍵詞"標記高亮顯示的文章就介紹到這了,更多相關Vue3關鍵詞標記高亮顯示內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue3和Vite不得不說的那些事

    Vue3和Vite不得不說的那些事

    這篇文章主要為大家詳細介紹了Vue3和Vite的那些事,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • vue自定義彈框效果(確認框、提示框)

    vue自定義彈框效果(確認框、提示框)

    這篇文章主要為大家詳細介紹了vue自定義彈框,實現(xiàn)確認框、提示框效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • vant組件表單外部的button觸發(fā)form表單的submit事件問題

    vant組件表單外部的button觸發(fā)form表單的submit事件問題

    這篇文章主要介紹了vant組件表單外部的button觸發(fā)form表單的submit事件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue-router4版本第一次打開界面不匹配路由問題解決

    vue-router4版本第一次打開界面不匹配路由問題解決

    本文主要介紹了vue-router4版本第一次打開界面不匹配路由問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • ElementUI日期選擇器時間選擇范圍限制的實現(xiàn)

    ElementUI日期選擇器時間選擇范圍限制的實現(xiàn)

    在日常開發(fā)中,我們會遇到一些情況,限制日期的范圍的選擇,本文就詳細的介紹了ElementUI日期選擇器時間選擇范圍限制的實現(xiàn),文中通過示例代碼介紹的非常詳細,感興趣的可以了解一下
    2022-04-04
  • vue封裝第三方插件并發(fā)布到npm的方法

    vue封裝第三方插件并發(fā)布到npm的方法

    本篇文章主要介紹了vue封裝第三方插件并發(fā)布到npm的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • vue中遇到的坑之變化檢測問題(數(shù)組相關)

    vue中遇到的坑之變化檢測問題(數(shù)組相關)

    這篇文章主要介紹了vue中遇到的坑之變化檢測問題(數(shù)組相關) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • vue3組合式api實現(xiàn)v-lazy圖片懶加載的方法實例

    vue3組合式api實現(xiàn)v-lazy圖片懶加載的方法實例

    vue作為前端主流的3大框架之一,目前在國內(nèi)有著非常廣泛的應用,下面這篇文章主要給大家介紹了關于vue3組合式api實現(xiàn)v-lazy圖片懶加載的相關資料,需要的朋友可以參考下
    2022-09-09
  • element動態(tài)路由面包屑的實現(xiàn)示例

    element動態(tài)路由面包屑的實現(xiàn)示例

    本文主要介紹了element動態(tài)路由面包屑的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Vue實現(xiàn)路由跳轉的3種方式超詳細分解

    Vue實現(xiàn)路由跳轉的3種方式超詳細分解

    Vue.js是一款流行的前端JavaScript框架,它提供了多種方式來實現(xiàn)路由跳轉,下面這篇文章主要給大家介紹了關于Vue實現(xiàn)路由跳轉的3種方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12

最新評論

罗平县| 句容市| 襄垣县| 涟源市| 庆城县| 华容县| 容城县| 温州市| 九台市| 郯城县| 碌曲县| 林甸县| 白河县| 石景山区| 精河县| 龙州县| 久治县| 繁昌县| 通山县| 旬阳县| 乌拉特前旗| 宜州市| 祁连县| 宁乡县| 阳东县| 汉川市| 庐江县| 麦盖提县| 凤翔县| 巢湖市| 阿克苏市| 阿克陶县| 汉寿县| 札达县| 新干县| 华容县| 育儿| 盐津县| 桦甸市| 惠州市| 古交市|