资讯专栏INFORMATION COLUMN

基于Vue实现关键词实时搜索高亮显示关键词

xushaojieaaa / 3570人阅读

摘要:高亮显示通过实现对关键词的替换,通过添加实现关键词高亮显示匹配关键字正则高亮替换值在查询到结果后执行方法将查询出来的数据传递过来通过来将关键词替换成标签,同时用中的进行绑定。

最近在做移动real-time-search于实时搜索和关键词高亮显示的功能,通过博客的方式总结一下,同时希望能够帮助到别人~~~

如果不喜欢看文字的朋友我写了一个demo方便已经上传到了github上,可以clone下来直接看代码 https://github.com/IT0315/rea...
下面是demo运行的效果图

好了闲话不多说直接上代码

实时搜索

实时搜索通过触发input事件和定时器来实现

在每次输入框的值变化的时候都会执行handleQuery方法

    clearTimer () {
      if (this.timer) {
        clearTimeout(this.timer)
      }
    },
    handleQuery (event) {
      this.clearTimer()
      console.log(event.timeStamp)
      this.timer = setTimeout(() => {
        console.log(event.timeStamp)
        // console.log(this.lastTime)
        // if (this.lastTime - event.timeStamp === 0) {
        this.$http.post("/api/vehicle").then(res => {
          console.log(res.data.data)
          this.changeColor(res.data.data)
        })
        // }
      }, 2000)
    },

在handleQuery方法中有一个定时器,通过设置时间来控制搜索的执行,由于输入时input的框中的值总是变化的,所以每次变化都会执行一次handleQuery,我们通过clearTimer方法清除timer定时器,如果两次输入的间隔时间小于你设置的时间间隔(2s)的话第一个定期器将会被清除,同时执行第二个定时器。这样就实现了实施搜多的控制,而不是每次输入的时候就去请求数据。

注意:如果时间设置过短或者说我们服务器请求较慢的话,可能第一次查询还没有返回便进行了第二次查询,那么返回的数据将是两次查询的结果,造成查询结果的混乱,如果使用的是axios可以利用axios.CancelToken来终止上一次的异步请求,防止旧关键字查询覆盖新输入的关键字查询结果。

高亮显示

通过RegExp实现对关键词的替换,通过添加class实现关键词高亮显示

 changeColor (resultsList) {
      resultsList.map((item, index) => {
        // console.log("item", item)
        if (this.keyWords && this.keyWords.length > 0) {
          // 匹配关键字正则
          let replaceReg = new RegExp(this.keyWords, "g")
          // 高亮替换v-html值
          let replaceString =
            "" + this.keyWords + ""
          resultsList[index].name = item.name.replace(
            replaceReg,
            replaceString
          )
        }
      })
      this.results = []
      this.results = resultsList
}

在查询到结果后执行changeColor方法将查询出来的数据传递过来通过RegExp来将关键词替换成huml标签,同时用vue中的v-html进行绑定。最后将demo完整的代码展示出来







最后,如果本文对你的学习或者工作有帮助的话,麻烦给个star鼓励下啦~~~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/116919.html

相关文章

  • 基于Vue实现键词实时搜索高亮显示键词

    摘要:高亮显示通过实现对关键词的替换,通过添加实现关键词高亮显示匹配关键字正则高亮替换值在查询到结果后执行方法将查询出来的数据传递过来通过来将关键词替换成标签,同时用中的进行绑定。 最近在做移动real-time-search于实时搜索和关键词高亮显示的功能,通过博客的方式总结一下,同时希望能够帮助到别人~~~ 如果不喜欢看文字的朋友我写了一个demo方便已经上传到了github上,可以cl...

    NusterCache 评论0 收藏0
  • vue 仿今日头条

    摘要:在下没有该问题。解决办法部分这里随意,需要用设定部分问题懒加载解决方法稍后补充参考文献组件按需加载路由懒加载项目中使用将多个组件合并打包并实现按需加载 vue 仿今日头条 为了增加移动端项目的经验,近一周通过 vue 仿写今日头条,以下就项目实现过程中遇到的问题以及解决方法给出总结,有什么不正确的地方,恳请大家批评指正^ _ ^!,代码仓库地址为 github 一、实现功能 首页展示...

    ShowerSun 评论0 收藏0
  • vue 仿今日头条

    摘要:在下没有该问题。解决办法部分这里随意,需要用设定部分问题懒加载解决方法稍后补充参考文献组件按需加载路由懒加载项目中使用将多个组件合并打包并实现按需加载 vue 仿今日头条 为了增加移动端项目的经验,近一周通过 vue 仿写今日头条,以下就项目实现过程中遇到的问题以及解决方法给出总结,有什么不正确的地方,恳请大家批评指正^ _ ^!,代码仓库地址为 github 一、实现功能 首页展示...

    Sourcelink 评论0 收藏0
  • 每日 30 秒 ⏱ SEO初体验

    showImg(https://segmentfault.com/img/remote/1460000018760855?w=900&h=500); 简介 SEO、Meta、搜索引擎优化、简单教程 细心的同学可能发现了开头出现了关键字,这是为什么呢?阅读完本文后大家就会明白了。 同学们有没有想过互联网上用户、网站 有多少呢?这里提供一个网站 internet live stats 里面实时的给出了...

    fai1017 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<