vue+Element实现搜索关键字高亮功能

2020-06-14 05:57:51易采站长站整理

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

一、实现思路

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 + '';