当前位置:Gxlcms > JavaScript > vue+Element实现搜索关键字高亮功能

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

时间:2021-07-01 10:21:17 帮助过:163人阅读

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

一、实现思路

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

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

二、实现过程

1 搜索条件表单

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

  1. <el-form :inline="true" :model="formQuery" >
  2. <el-row>
  3. <el-col :span="8">
  4. <el-form-item label="日志编码" >
  5. <el-input v-model="formQuery.queryMessage1" ></el-input>
  6. </el-form-item>
  7. </el-col>
  8. <el-col :span="8" >
  9. <el-form-item label="日志编码2">
  10. <el-input v-model="formQuery.queryMessage2" ></el-input>
  11. </el-form-item>
  12. </el-col>
  13. </el-row>
  14. <el-row>
  15. <el-col :span="20">
  16. <el-form-item label="日志编码3">
  17. <el-input v-model="formQuery.queryMessage3" ></el-input> </el-form-item>
  18. </el-col>
  19. <el-col :span="4">
  20. <el-form-item>
  21. <el-button @click="loadData()" >查询</el-button>
  22. </el-form-item>
  23. </el-col>
  24. </el-row>
  25. </el-form>

2 表格部分

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

3.实时监听表格

  1. computed:{
  2. // 实时监听表格
  3. tables: function() {
  4. const search = this.listQuery.queryMessage||this.listQuery.queryMessage2||this.listQuery.queryMessage3
  5. if (search) {
  6. return this.logInfosData.filter(dataNews => {
  7. return Object.keys(dataNews).some(key => {
  8. return String(dataNews[key]).toLowerCase().indexOf(search) > -1
  9. })
  10. })
  11. }
  12. return this.tableData
  13. }
  14. }

4.修改关键字样式

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

三、总结

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

人气教程排行