Vue中实现搜索内容关键词高亮场景

365 阅读1分钟

Vue中实现搜索内容关键词高亮场景

最近在维护数据推荐后台管理系统的时候,舍友在后端新增了几个接口给我提了个新的需求:构建一个新的页面,可以对数据进行综合查询,还给了我一个示例图:

image.png

点击不同的选项可以进行分类查询,大体的功能基本都没什么难度,但是这个对搜索出来的关键词进行高亮标记的场景我是第一次接触,而且一时半会也想不出该怎么实现,后来ChatGPT给了我一点启发:大体思路就是记录下搜索框中的关键词及从后端请求回来的数据,将关键词与请求回来的数据进行匹配,如果遇到与关键词相同的内容,则用被高亮标记后的span标签进行关键词替换,最终用v-html指令将数据渲染到页面上,具体实现代码如下:

<div class="itemText">
    <!-- 使用 v-html 指令对替换好的内容进行渲染 -->
    <span class="itemName" v-html="getHighlightText(item.name)"></span>
    <span class="itemMaterial">{{ item.description }}</span>
</div>
methods: {
    getHighlightText(text) {
      const keyword = this.searchForm.searchText // 搜索框中的关键词
      return text.replace(new RegExp(keyword, 'g'), `<span style="color: green;">${keyword}</span>`) // 进行关键词替换
    }
}

最终实现效果如下:

image.png