vue 实现搜索标红功能

本文介绍了一种在Vue中实现搜索关键词高亮显示的方法,通过自定义指令将匹配文本包裹在span标签中并应用样式,适用于动态更新的搜索结果。

思路:将搜索出来的匹配文本包裹span标签,并附上标红相关样式,因为涉及到DOM操作,所以写成指令。代码实现如下

import Vue from 'vue'

function hightLight(el, binding) {
  const match = binding.value;
  const reg = new RegExp(match, 'g')
  const txt = binding.arg
  let str = '';
  if (txt) {
    str = txt.replace(reg, `<span style="color:#F96600">${match}</span>`)
  } else {
    str = ''
  }
  el.innerHTML = str;
}

Vue.directive('hightlight', {
  bind(el, binding) {
    hightLight(el, binding)
  },
  componentUpdated(el, binding) {
    hightLight(el, binding)
  }
})

使用:引入该指令,然后使用方法如下

v-hightlight:[搜索出来的文本]="搜索关键词"

由于包裹span后的文本会被转义,直接从DOM中拿是转义后的文本,搜索结果改变时,需再次进行匹配包裹,如果搜索结果文本直接冲DOM里面拿,匹配起来比较麻烦,所以件搜索出来的文本作为参数传递进去。

 

 

 

 

 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值