vue2 搜索高亮关键字

界面:
搜索 "成功"
附上代码(开箱即用)
javascript 复制代码
<template>
  <div class="box">
    <input class="input-box" v-model="searchKeyword" placeholder="输入搜索关键字" />
    <div class="result-box" v-for="item in highlightedResultList" :key="item.value">
      <div class="result">名称:<span v-html="highlightedText(item.name)"></span></div>
      <div class="result">类别:{{ item.label }} </div>
      <div class="result" v-html="highlightedText(item.infos)"></div>
    </div>
  </div>
</template>

<script>
export default {
  data () {
    return {
      searchKeyword: '',
      resultList: [
        {
          value: 1,
          name: '成长的机遇',
          label: '励志',
          infos:
            '在人生的漫长旅程中,没有彩排,每一个瞬间都是现场直播。我们无法预知未来会发生什么,但我们可以把握当下,用勇气和决心去书写属于自己的精彩篇章。无论前方的道路是平坦还是崎岖,我们都要坚定地迈出每一步。当遇到困难时,不要退缩,因为那是成长的机遇;当遭遇挫折时,不要气馁,因为那是成功的前奏。相信自己的能力,勇敢地去追求梦想,让生命在奋斗中绽放出绚丽的光彩。',
        },
        {
          value: 2,
          name: '生活从来都不是一帆风顺',
          label: '成长',
          infos:
            '生活从来都不是一帆风顺的,即使道路坎坷不平,车轮也要前进;即使江河波涛汹涌,船只也要航行。在逐梦的道路上,我们会遇到各种各样的挑战和困难,但这正是考验我们毅力和勇气的时候。不要害怕失败,因为失败是成功之母;不要畏惧困难,因为困难是成长的阶梯。只要我们怀揣着坚定的信念,勇往直前,就一定能够克服一切障碍,到达成功的彼岸。',
        },
        {
          value: 3,
          name: '关于努力',
          label: '成长',
          infos: '每一次努力,都是成长的积累;每一次挑战,都是进步的阶梯。在人生的道路上,我们不断地挑战自我,超越自我。每一次的努力都不会白费,它会在我们的生命中留下深深的印记,成为我们前进的动力。当我们面对困难时,不要轻易放弃,要相信自己的能力,坚持不懈地去努力。只有经历了风雨的洗礼,我们才能更加坚强;只有经过了磨砺的人生,才会更加精彩。让我们用汗水和努力,铸就辉煌的人生。',
        },
        {
          value: 4,
          name: '你远比自己想象的更强大',
          label: '感悟',
          infos:
            '不要因为一时的困难而停下脚步,因为你远比自己想象的更强大。生活中总会有不如意的时候,但这并不代表我们无法克服。在困境中,我们要学会挖掘自己的潜力,激发自己的斗志。每一个人都有无限的可能,只要我们敢于挑战,勇于拼搏,就一定能够创造出属于自己的奇迹。朝着目标奋进,无论前方有多少艰难险阻,都要坚定地走下去。在这个过程中,我们会收获成长,收获成功,绽放出璀璨的光芒。',
        }
      ]
    };
  },
  computed: {
    highlightedResultList () {
      const keyword = this.searchKeyword;
      if (!keyword) return this.resultList;

      return this.resultList.map(item => {
        const highlightedName = this.highlightedText(item.name);
        const highlightedInfos = this.highlightedText(item.infos);
        return { ...item, name: highlightedName, infos: highlightedInfos };
      });
    },
  },
  methods: {
    highlightedText (text) {
      const keyword = this.searchKeyword;
      if (!keyword) return text;
      const regex = new RegExp(keyword, 'gi');
      return text.replace(regex, `<span style="color: red;font-weight:bold;">${keyword}</span>`);
    },
  },
};
</script>
<style scoped >
.box {
  margin: 20px 15%;
}
.input-box {
  margin: 20px 20%;
  border: 1px solid #ccc;
  padding: 10px;
}
.result-box {
  border: 1px solid #ccc;
  padding: 10px;
  margin-bottom: 20px;
}
.result {
  margin: 5px;
}
</style>
相关推荐
小堂子这厢有礼了11 小时前
Chet.QuartzNet.UI v2.3.0 大更新!表格重构 + 系统配置 + 分析页全面升级!
前端·后端·ui·重构·c#·vue
碎碎念_4921 天前
前后端分离项目开发规范
nginx·vue·springboot·restful
不能只会打代码1 天前
校享云 — 高校智慧后勤平台微服务架构设计与实践
spring cloud·docker·微服务·nacos·vue·校享云
是梦终空1 天前
计算机毕业设计279—基于SpringBoot+Vue3校园商户意见反馈系统(源代码+数据库+17000字论文+ppt)
数据库·spring boot·vue·毕业设计·课程设计·毕业论文·源代码
yyt3630458412 天前
KlineChartQuant Tooltip 高频交互 200FPS 性能优化完整复盘
前端·经验分享·性能优化·typescript·vue·交互·chrome devtools
这里是杨杨吖3 天前
SpringBoot+Vue心理健康咨询系统 附带详细运行指导视频
spring boot·vue·心理健康
爱上纯净的蓝天5 天前
使用 AtomCode 构建微前端架构:从设计到实现实战
架构·vue·实战·react·微前端·atomcode
山海云端有限公司7 天前
随机诗词API实战:Vue项目接入完整示例与5个常见坑
vue·实战·前端开发·跨域·api调用·随机诗词api
暗冰ཏོ7 天前
Spring Boot + Vue3 订单支付模块技术实现:支付单、回调验签、幂等处理与余额扣减
前端·spring boot·后端·vue·微信支付·支付宝支付