最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-27 22:11:11
文档

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

基于Vue实现关键词实时搜索高亮显示关键词:最近在做移动real-time-search于实时搜索和关键词高亮显示的功能,通过博客的方式总结一下,同时希望能够帮助到别人~~~ 如果不喜欢看文字的朋友我写了一个demo方便已经上传到了github上,可以clone下来直接看代码 https://github.com/IT0
推荐度:
导读基于Vue实现关键词实时搜索高亮显示关键词:最近在做移动real-time-search于实时搜索和关键词高亮显示的功能,通过博客的方式总结一下,同时希望能够帮助到别人~~~ 如果不喜欢看文字的朋友我写了一个demo方便已经上传到了github上,可以clone下来直接看代码 https://github.com/IT0

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

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

在每次输入框的值变化的时候都会执行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 =
 '<span class="search-text">' + this.keyWords + '</span>'
 resultsList[index].name = item.name.replace(
 replaceReg,
 replaceString
 )
 }
 })
 this.results = []
 this.results = resultsList
}

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

<template>
 <div class="Home">
 <input v-model="keyWords" type="text" placeholder="请输入关键词" @input="handleQuery">
 <ul>
 <li v-for="(item,index) in results" :key='index' v-html='item.name'></li>
 </ul>
 </div>
</template>

<script>
export default {
 name: 'Home',
 data () {
 return {
 keyWords: '',
 results: []
 }
 },
 methods: {
 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)
 },

 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 =
 '<span class="search-text">' + this.keyWords + '</span>'
 resultsList[index].name = item.name.replace(
 replaceReg,
 replaceString
 )
 }
 })
 this.results = []
 this.results = resultsList
 }
 }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
.search-text{
color: red;
}
</style>

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

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

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

基于Vue实现关键词实时搜索高亮显示关键词:最近在做移动real-time-search于实时搜索和关键词高亮显示的功能,通过博客的方式总结一下,同时希望能够帮助到别人~~~ 如果不喜欢看文字的朋友我写了一个demo方便已经上传到了github上,可以clone下来直接看代码 https://github.com/IT0
推荐度:
标签: VUE 关键词 关键字
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top