文明其精神,野蛮其体魄。🍺|

yunChuans

园龄:3年4个月粉丝:6关注:0

前端实现搜索然后关键字变色

效果

image

核心实现思路

  1. 先通过input的input事件,获取到输入框里输入的关键字,根据关键字过滤一遍数据。
  2. 根据过滤后的数据,调用封装好的替换方法。就是字符串的替换,替换成html片段,在dom元素上使用v-html。

替换方法实现

 // 匹配到的关键字变色
    keyWordchangeColor(kw, str) {
      // kw 传入的关键字 str 需要检索关键字的字符串
      const reg = new RegExp(kw, 'ig'); // ig 是所有的意思 而非在发现第一个匹配项时立即停止
      // 使用replace方法替换元素产生高亮
      return str.replace(reg, (match) => `<span style="color:#66a4fb">${match}</span>`);
    },

完整代码

 processSearchChange(val) {
      if (val.length > 49) {
        this.$message.warning('最大支持输入50个字符');
      }
      if (val.length === 0) {
        this.nodes = JSON.parse(JSON.stringify(this.nodes2));
        this.noResult = false;
        return;
      }
      // data中定义了两个相同的nodes 处理下键盘输入 _
      this.nodes = JSON.parse(JSON.stringify(this.nodes2));
      this.nodes = this.nodes.filter((item) => item.projectName.includes(val) || item.projectId.includes(val) || item.processName.includes(val));
      // 未查询到数据
      if (this.nodes.length === 0) {
        this.noResult = true;
      } else {
        this.noResult = false;
      }
      this.nodes.forEach((item) => {
        item.processName = this.keyWordchangeColor(val, item.processName);
        item.projectName = this.keyWordchangeColor(val, item.projectName);
        item.projectId = this.keyWordchangeColor(val, item.projectId);
      });
    },
    // 匹配到的关键字变色
    keyWordchangeColor(kw, str) {
      // kw 传入的关键字 str 需要检索关键字的字符串
      const reg = new RegExp(kw, 'ig'); // ig 是所有的意思 而非在发现第一个匹配项时立即停止
      // 使用replace方法替换元素产生高亮
      return str.replace(reg, (match) => `<span style="color:#66a4fb">${match}</span>`);
    },

本文作者:yunChuans

本文链接:https://www.cnblogs.com/zychuan/p/17106305.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   yunChuans  阅读(479)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 恋ダコ (茧•爱) 恋ダコ
  2. 2 君がいて水になる 正しい偽りからの起床
恋ダコ (茧•爱) - 恋ダコ
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.