vue搜索关键字高亮

<template>
    <el-input
      class="fd-ipt"
      placeholder="请输入内容"
      v-model="inputValue"
      @keyup.enter.native="searchText">
    </el-input>
    <div class="container" v-for="(v, k, i) in htmlContent" :key="i">
        <h3 class="fd-title" v-html="v.title"></h3>
        <div class="fd-content" v-html="v.content"></div>
    </div>
</template>
<script>
    export default {
      data() {
        return {
          inputValue:'', 
          htmlContent:[{
              "title":"第一章",
              "content":"他是无意穿堂风,却偏偏孤据引山洪。"
              },{
              "title":"第二章",
              "content":"我记得我无数次点开对话框,却只"
              }]
          }
        },
  methods: {
    searchText() {  
        if (this.inputValue) {
        // 每次查询之前清空原数据中标签,防止再次查询时,查不到
        if (document.querySelectorAll('.highlight').length > 0) {
            this.htmlContent.forEach((item, index) => {
            this.$set(item, 'title', item.title.replace(/<[^<>]+>/g, ""))
            this.$set(item, 'content', item.content.replace(/<[^<>]+>/g, ""))
            })
        }
        const regExp = new RegExp(this.inputValue, 'g');
        this.htmlContent.forEach((item, index) => {
            // 采用$set方法  防止切换数据后,视图不更新
            this.$set(item, 'title', item.title.replace(regExp, `<span class="highlight">${this.inputValue}</span>`))
            this.$set(item, 'content', item.content.replace(regExp, `<span class="highlight">${this.inputValue}</span>`))
        })
        } 
    },
}};

</script>

<style>

.highlight {
  color: red;
}

</style>


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值