vue实现搜索结果高亮

业务需求

实现搜索功能,搜索后展示结果列表,其中关键字要能够高亮显示

实现思路

采用自定义指令实现,获取HTML的内容,根据指令传入的关键字,利用String.split()拆分后把关键字放到span标签中在拼接回去,增加一个带类名span,可以自定义样式。

一开始想用v-html直接实现增加一个span包裹关键字,然后发现eslint设置了不用v-html,就没有用v-html指令。

具体代码

/src/directive/heightline.js

export default {
  bind: function(el, binding) {
    const { value } = binding;
    let str = ''
    let textArr = el.innerHTML.split(value);
    textArr.forEach((item, index) => {
      if (index < textArr.length - 1) {
        str = str + item + `<span class="text-height-line">${value}</span>`
      } else {
        str = str + item
      }
    })
    el.innerHTML = str
  }
}

/src/directive/index.js

import heightline from "./heightline";
const install = function(Vue) {
  Vue.directive('heightline', heightline)
}
if (window.Vue) {
  window.heightline = heightline;
    Vue.use(install) 
}
heightline.install = install;
export default heightline;

/src/main.js

import Vue from 'vue'
import heightline from './directive/heightline';
Vue.use(heightline)
// ...

页面使用

<span v-heightline="'关键字'">搜索结果的关键字文本</span>

<style>
/deep/.text-height-line{
        color:  #1a91ff;
      }
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值