中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Vue實現關鍵詞實時搜索高亮顯示關鍵詞

發布時間:2021-04-23 12:50:38 來源:億速云 閱讀:543 作者:小新 欄目:web開發

這篇文章將為大家詳細講解有關如何使用Vue實現關鍵詞實時搜索高亮顯示關鍵詞,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

為什么要使用Vue

Vue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以創建可維護性和可測試性更強的代碼庫,Vue允許可以將一個網頁分割成可復用的組件,每個組件都包含屬于自己的HTML、CSS、JavaScript,以用來渲染網頁中相應的地方,所以越來越多的前端開發者使用vue。

下面是demo運行的效果圖

如何使用Vue實現關鍵詞實時搜索高亮顯示關鍵詞

好了閑話不多說直接上代碼

實時搜索

實時搜索通過觸發input事件和定時器來實現

<input v-model="keyWords" type="text" placeholder="請輸入關鍵詞" @input="handleQuery">

在每次輸入框的值變化的時候都會執行handleQuery方法

 clearTimer () {
   if (this.timer) {
    clearTimeout(this.timer)
   }
  },
  handleQuery (event) {
   this.clearTimer()
   console.log(event.timeStamp)
   this.timer = setTimeout(() => {
    console.log(event.timeStamp)
    // console.log(this.lastTime)
    // if (this.lastTime - event.timeStamp === 0) {
    this.$http.post('/api/vehicle').then(res => {
     console.log(res.data.data)
     this.changeColor(res.data.data)
    })
    // }
   }, 2000)
  },

在handleQuery方法中有一個定時器,通過設置時間來控制搜索的執行,由于輸入時input的框中的值總是變化的,所以每次變化都會執行一次handleQuery,我們通過clearTimer方法清除timer定時器,如果兩次輸入的間隔時間小于你設置的時間間隔(2s)的話第一個定期器將會被清除,同時執行第二個定時器。這樣就實現了實施搜多的控制,而不是每次輸入的時候就去請求數據。

注意:如果時間設置過短或者說我們服務器請求較慢的話,可能第一次查詢還沒有返回便進行了第二次查詢,那么返回的數據將是兩次查詢的結果,造成查詢結果的混亂,如果使用的是axios可以利用axios.CancelToken來終止上一次的異步請求,防止舊關鍵字查詢覆蓋新輸入的關鍵字查詢結果。

高亮顯示

通過RegExp實現對關鍵詞的替換,通過添加class實現關鍵詞高亮顯示

 changeColor (resultsList) {
   resultsList.map((item, index) => {
    // console.log('item', item)
    if (this.keyWords && this.keyWords.length > 0) {
     // 匹配關鍵字正則
     let replaceReg = new RegExp(this.keyWords, 'g')
     // 高亮替換v-html值
     let replaceString =
      '<span class="search-text">' + this.keyWords + '</span>'
     resultsList[index].name = item.name.replace(
      replaceReg,
      replaceString
     )
    }
   })
   this.results = []
   this.results = resultsList
}

在查詢到結果后執行changeColor方法將查詢出來的數據傳遞過來通過RegExp來將關鍵詞替換成huml標簽,同時用vue中的v-html進行綁定。最后將demo完整的代碼展示出來

<template>
 <div class="Home">
  <input v-model="keyWords" type="text" placeholder="請輸入關鍵詞" @input="handleQuery">
  <ul>
    <li v-for="(item,index) in results" :key='index' v-html='item.name'></li>
  </ul>
 </div>
</template>

<script>
export default {
 name: 'Home',
 data () {
  return {
   keyWords: '',
   results: []
  }
 },
 methods: {
  clearTimer () {
   if (this.timer) {
    clearTimeout(this.timer)
   }
  },
  handleQuery (event) {
   this.clearTimer()
   console.log(event.timeStamp)
   this.timer = setTimeout(() => {
    console.log(event.timeStamp)
    // console.log(this.lastTime)
    // if (this.lastTime - event.timeStamp === 0) {
    this.$http.post('/api/vehicle').then(res => {
     console.log(res.data.data)
     this.changeColor(res.data.data)
    })
    // }
   }, 2000)
  },

  changeColor (resultsList) {
   resultsList.map((item, index) => {
    // console.log('item', item)
    if (this.keyWords && this.keyWords.length > 0) {
     // 匹配關鍵字正則
     let replaceReg = new RegExp(this.keyWords, 'g')
     // 高亮替換v-html值
     let replaceString =
      '<span class="search-text">' + this.keyWords + '</span>'
     resultsList[index].name = item.name.replace(
      replaceReg,
      replaceString
     )
    }
   })
   this.results = []
   this.results = resultsList
  }
 }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
.search-text{
color: red;
}
</style>

關于“如何使用Vue實現關鍵詞實時搜索高亮顯示關鍵詞”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

新余市| 嵩明县| 屏山县| 项城市| 合山市| 永和县| 万源市| 景泰县| 嵊泗县| 南江县| 曲水县| 新田县| 庆云县| 称多县| 静宁县| 平昌县| 郯城县| 综艺| 亚东县| 石狮市| 称多县| 松江区| 米脂县| 太原市| 进贤县| 类乌齐县| 漯河市| 沿河| 达日县| 霍城县| 白山市| 巩义市| 光泽县| 定陶县| 饶河县| 清徐县| 门源| 宜宾县| 商洛市| 延津县| 霍山县|