weixin_41452476 2023-03-10 11:06 采纳率: 42.9%
浏览 99
已结题

vue中,如何实现这个搜索出来的的内容加上高亮

vue中,如何实现给搜索出来的内容,单独的文字加上高亮,如下图所示

img

  • 写回答

8条回答 默认 最新

  • dahe0825 2023-03-10 11:33
    关注

    参考GPT的回答和自己的思路,vue中,如何实现这个搜索出来的的内容加上高亮代码如下所示:

    <template>
      <div>
        <input v-model="keyword" placeholder="搜索...">
        <ul>
          <li v-for="item in searchResult" :key="item.id">
            <span v-html="highlightKeyword(item.title)"></span>
          </li>
        </ul>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          keyword: '',
          items: [
            { id: 1, title: 'Vue.js is a progressive JavaScript framework' },
            { id: 2, title: 'Vue.js makes building complex web applications a breeze' },
            { id: 3, title: 'Vue.js is easy to learn and use' }
          ]
        }
      },
      computed: {
        searchResult() {
          if (!this.keyword) {
            return this.items
          }
          const pattern = new RegExp(this.keyword, 'gi')
          return this.items.filter(item => item.title.match(pattern))
        }
      },
      methods: {
        highlightKeyword(title) {
          if (!this.keyword) {
            return title
          }
          const pattern = new RegExp(this.keyword, 'gi')
          const matched = title.match(pattern)
          if (!matched) {
            return title
          }
          const highlighted = title.replace(pattern, `<span class="highlight">${matched[0]}</span>`)
          return highlighted
        }
      }
    }
    </script>
    
    <style>
    .highlight {
      background-color: yellow;
      color: black;
    }
    </style>
    

    以下是实现代码的完整思路,可以帮助您理解,
    1.首先,在模板中定义一个用于展示搜索结果的列表:

    <ul>
      <li v-for="item in searchResult" :key="item.id">
        <span v-html="highlightKeyword(item.title)"></span>
      </li>
    </ul>
    

    2.在Vue实例中定义一个方法highlightKeyword,该方法接收一个字符串参数,用于将关键字高亮显示。该方法的实现如下:

    methods: {
      highlightKeyword(title) {
        if (!this.keyword) {
          return title
        }
        const pattern = new RegExp(this.keyword, 'gi')
        const matched = title.match(pattern)
        if (!matched) {
          return title
        }
        const highlighted = title.replace(pattern, `<span class="highlight">${matched[0]}</span>`)
        return highlighted
      }
    }
    

    在上述代码中,首先判断keyword是否存在,如果不存在则返回原始字符串title。如果keyword存在,则使用正则表达式创建一个不区分大小写的匹配模式,然后在title中查找匹配的关键字,并将其用标签包裹起来,同时为该标签添加highlight类,以便后续可以在样式表中为它设置高亮效果。

    3.最后,在样式表中定义highlight类的样式,用于将高亮文本呈现为黄色背景、黑色文字:

    .highlight {
      background-color: yellow;
      color: black;
    }
    

    回答不易,还请采纳!!!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 3月22日
  • 已采纳回答 3月14日
  • 创建了问题 3月10日

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图