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

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

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

实时搜索

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

  1. <input v-model="keyWords" type="text" placeholder="请输入关键词" @input="handleQuery">

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

  1. clearTimer () {
  2. if (this.timer) {
  3. clearTimeout(this.timer)
  4. }
  5. },
  6. handleQuery (event) {
  7. this.clearTimer()
  8. console.log(event.timeStamp)
  9. this.timer = setTimeout(() => {
  10. console.log(event.timeStamp)
  11. // console.log(this.lastTime)
  12. // if (this.lastTime - event.timeStamp === 0) {
  13. this.$http.post('/api/vehicle').then(res => {
  14. console.log(res.data.data)
  15. this.changeColor(res.data.data)
  16. })
  17. // }
  18. }, 2000)
  19. },

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

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

高亮显示

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

  1. changeColor (resultsList) {
  2. resultsList.map((item, index) => {
  3. // console.log('item', item)
  4. if (this.keyWords && this.keyWords.length > 0) {
  5. // 匹配关键字正则
  6. let replaceReg = new RegExp(this.keyWords, 'g')
  7. // 高亮替换v-html值
  8. let replaceString =
  9. '<span class="search-text">' + this.keyWords + '</span>'
  10. resultsList[index].name = item.name.replace(
  11. replaceReg,
  12. replaceString
  13. )
  14. }
  15. })
  16. this.results = []
  17. this.results = resultsList
  18. }

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

  1. <template>
  2. <div class="Home">
  3. <input v-model="keyWords" type="text" placeholder="请输入关键词" @input="handleQuery">
  4. <ul>
  5. <li v-for="(item,index) in results" :key='index' v-html='item.name'></li>
  6. </ul>
  7. </div>
  8. </template>
  9. <script>
  10. export default {
  11. name: 'Home',
  12. data () {
  13. return {
  14. keyWords: '',
  15. results: []
  16. }
  17. },
  18. methods: {
  19. clearTimer () {
  20. if (this.timer) {
  21. clearTimeout(this.timer)
  22. }
  23. },
  24. handleQuery (event) {
  25. this.clearTimer()
  26. console.log(event.timeStamp)
  27. this.timer = setTimeout(() => {
  28. console.log(event.timeStamp)
  29. // console.log(this.lastTime)
  30. // if (this.lastTime - event.timeStamp === 0) {
  31. this.$http.post('/api/vehicle').then(res => {
  32. console.log(res.data.data)
  33. this.changeColor(res.data.data)
  34. })
  35. // }
  36. }, 2000)
  37. },
  38. changeColor (resultsList) {
  39. resultsList.map((item, index) => {
  40. // console.log('item', item)
  41. if (this.keyWords && this.keyWords.length > 0) {
  42. // 匹配关键字正则
  43. let replaceReg = new RegExp(this.keyWords, 'g')
  44. // 高亮替换v-html值
  45. let replaceString =
  46. '<span class="search-text">' + this.keyWords + '</span>'
  47. resultsList[index].name = item.name.replace(
  48. replaceReg,
  49. replaceString
  50. )
  51. }
  52. })
  53. this.results = []
  54. this.results = resultsList
  55. }
  56. }
  57. }
  58. </script>
  59. <!-- Add "scoped" attribute to limit CSS to this component only -->
  60. <style>
  61. .search-text{
  62. color: red;
  63. }
  64. </style>

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

本文转载于:猿2048→https://www.mk2048.com/blog/blog.php?id=hbh21ic0jaa

基于Vue实现关键词实时搜索高亮显示关键词的更多相关文章

  1. 基于vue的多引擎搜索及关键字提示

    关键代码: <div class="header-search"> <form id="form" action="http://m ...

  2. 【lucene系列学习二】Lucene实现高亮显示关键词

    首先,导入下图所示库 然后,import org.apache.lucene.search.highlight.*; 下面,我们新建一个实现高亮显示功能的函数 public static String ...

  3. 使用Spark进行搜狗日志分析实例——列出搜索不同关键词超过10个的用户及其搜索的关键词

    package sogolog import org.apache.hadoop.io.{LongWritable, Text} import org.apache.hadoop.mapred.Tex ...

  4. solr6.3根据搜索关键词词频(关键词出现次数、关键词highlight)进行排序

    http://localhost:8080/solr/test/select?fq=product_name:大有&indent=on&q=product_name:大有电钻 OR r ...

  5. 用Vue+axios写一个实时搜索

    刚刚在学vue,试着写了一个实时搜索文件. 思路:1.input 通过v-model绑定.2.通过watch检测输入结果变化.3根据结果变化从api调用不同的数据. 代码如下: <!DOCTYP ...

  6. legend3---21、查问题或者查插件的时候请搜索对关键词

    legend3---21.查问题或者查插件的时候请搜索对关键词 一.总结 一句话总结: 比如要查移动端的js图片裁剪插件,直接搜就“移动端的js图片裁剪插件” 千万记得问题和找资料都搜索对关键词(搜索 ...

  7. seo搜索优化教程11-seo搜索优化关键词策略

    为了使大家更方便的了解及学习网络营销推广.seo搜索优化,星辉科技强势推出seo搜索优化教程.此为seo教程第11课 关键词在seo搜索优化中有着重要的地位,本节主要讲解seo搜索优化中关键词优化的相 ...

  8. 苏宁基于Spark Streaming的实时日志分析系统实践 Spark Streaming 在数据平台日志解析功能的应用

    https://mp.weixin.qq.com/s/KPTM02-ICt72_7ZdRZIHBA 苏宁基于Spark Streaming的实时日志分析系统实践 原创: AI+落地实践 AI前线 20 ...

  9. Everything文件名实时搜索||解决局域网文件共享问题

    内容概要:Everything中文版下载地址及使用.用Everything轻松解决局域网文件共享问题.Everything语言设置问题 另:Everything只支持NTFS格式的磁盘(工作原理的缘故 ...

随机推荐

  1. burpsuite常见问题

    中文乱码问题:https://www.cnblogs.com/bk76120/p/12400092.html 无法抓取本地或局域网其他主机的包 去掉"对于本地地址不使用代理服务器" ...

  2. MaRVIN

    [ResourceRegistration] 加给Resource类 [ResourceReference(--)] 加给Resource类中引动到的Resource类,引用多个的话用IReferen ...

  3. linux作业--第一周

    1.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别. 目前三大主流发行版分别为Debian.Redhat.SUSE. redhat: RHEL: Red Hat公司发布的面向企业用户的 ...

  4. jQuery-ajax-天气接口

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. LGP5044口胡

    套路题. 对于这一类与 \(\max\) 有关的题,优先考虑笛卡尔树. 建出笛卡尔树,考虑处理以某个点 \(u\) 举办会议时,参加会议的成本. 这里考虑询问区间为 \([1,n]\). 明显 \(u ...

  6. CentOS 5.11源修改

    CentOS 5.11源 将源中所有网址替换为 http://archive.kernel.org/centos-vault/你的版本/ 一条sed命令即可解决 sed -i 's@http://xx ...

  7. Python之简单的用户名密码验证

    题目要求: 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定   #要求使用文件存储用户名和密码,每次从文件读入用户名和密码用来验证,如果输错三次密码该账户会被锁定,并讲锁定的用户名写入文件 # ...

  8. 恢复mysql管理员密码

    1.向mysqld server 发送kill命令关掉mysqld server(不是 kill -9),存放进程ID的文件通常在MYSQL的数据库所在的目录/var/lib/mysql中.# kil ...

  9. kali下对Docker的详细安装

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 前言 Docker是渗透测试中必学不可的一个容器工具,在其中,我们能够快速创建.运行.测试以及部署应用程序.如,我们对一些漏洞进行本地复现时,可以 ...

  10. CVE-2015-1427(Groovy 沙盒绕过 && 代码执行漏洞)

    1.vulhub环境搭建 https://blog.csdn.net/qq_36374896/article/details/84102101 2.启动docker环境 cd vulhub-maste ...