视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
vue+Element实现搜索关键字高亮功能
2020-11-27 21:55:57 责编:小采
文档

最近做了一个日志搜索的需求,要在页面上实现海量日志的关键字搜索。为了搜索更清晰,我最终实现了多条件搜索,且搜索结果的记录中的关键字全部高亮。

一、实现思路

1 实时监控表格,实现关键字的定位;

2 点击搜索按钮以后,实现记录中关键字的样式变化(即高亮)。

二、实现过程

1 搜索条件表单

了解了实现思路,就让我们一起来看一下实现过程(关键位置均给了注释)

<el-form :inline="true" :model="formQuery" >
 <el-row>
 <el-col :span="8">
 <el-form-item label="日志编码" >
 <el-input v-model="formQuery.queryMessage1" ></el-input>
 </el-form-item>
 </el-col>
 <el-col :span="8" >
 <el-form-item label="日志编码2">
 <el-input v-model="formQuery.queryMessage2" ></el-input>
 </el-form-item>
 </el-col>
 </el-row>
 <el-row>
 <el-col :span="20">
 <el-form-item label="日志编码3">
 <el-input v-model="formQuery.queryMessage3" ></el-input> </el-form-item>
 </el-col>
 <el-col :span="4">
 <el-form-item>
 <el-button @click="loadData()" >查询</el-button>
 </el-form-item>
 </el-col>
 </el-row>
</el-form>

2 表格部分

<el-table :fit="true" ref="logInfosData" max-height="700" :data="logInfosData"
 element-loading-text="loading" :highlight-current-row="true"
 size="mini" >
 <el-table-column prop="_source.message" :label="$t('Loginformation')" sortable >
 <template slot-scope="scope">
 <span v-html="showData(message)"
 == <!--注意此处的写法,该函数showData返回的结果是一段HTML代码,在这里是直接进行填充,填充的内容是修改了关键字样式以后的内容。-->==
 ></span>
 </template>
 </el-table-column>
</el-table>

3.实时监听表格

computed:{
 // 实时监听表格
 tables: function() {
 const search = this.listQuery.queryMessage||this.listQuery.queryMessage2||this.listQuery.queryMessage3
 if (search) {
 return this.logInfosData.filter(dataNews => {
 return Object.keys(dataNews).some(key => {
 return String(dataNews[key]).toLowerCase().indexOf(search) > -1
 })
 })
 }
 return this.tableData
 }
 }

4.修改关键字样式

// 筛选变色
 showData(val) {
 val = val + '';
 if (this.checkPara(val,this.listQuery.queryMessage)||this.checkPara(val,this.listQuery.queryMessage2)
 ||this.checkPara(val,this.listQuery.queryMessage3)) {
 //如果搜索结果记录包含关键字中的任何一个,那么修改样式
 return val.replace(this.listQuery.queryMessage'<font color="#409EFF">' + this.listQuery.prodcd + '</font>')
 .replace(this.listQuery.queryMessage2, '<font color="#409EFF">' + this.listQuery.queryMessage3 + '</font>')
 
 } else {
 return val //不做任何修改
 }
 },
 //判断搜索记录是否包含某个关键字
 checkPara(val,para){
 if (val.indexOf(para) !== -1 && para !== ''){
 return true;
 }else {
 return false
 }
 }

三、总结

实现以后会觉得思路很简单。其实任何一个多么复杂的需求,只要在做之前,理清思路,分成一个个小的实现过程,那么就自然很简单,而且效率也很高。这也是我的真切感受。

下载本文
显示全文
专题