当前位置:   article > 正文

vue项目高亮显示搜索内容_vue2-ace-editor 高亮检索内容

vue2-ace-editor 高亮检索内容

最近项目中用到了高亮显示搜索结果,自己也是百度了好一阵子,拼凑来的,这里记录一下

效果图

html结构

  1. <!-- html -->
  2. <fieldset>
  3. <el-input
  4. v-model="search"
  5. style="width: 200px;"
  6. @keyup.enter.native="handleSearch"
  7. ></el-input>
  8. <ul>
  9. <li
  10. class="li"
  11. v-for="item in listData"
  12. :key="item"
  13. >
  14. {{ item }}
  15. </li>
  16. </ul>
  17. </fieldset>

 data中数据定义

  1. data() {
  2. return {
  3. // 搜索关键字
  4. search: '',
  5. // 定义需要特殊处理的字符
  6. specialChar: ['*','.','?','+','$','^','[',']','(',')','{','}','|','\\','/' ],
  7. // 模拟数据
  8. listData: [
  9. '春江花月夜',
  10. '春江潮水连海平,海上明月共潮生。',
  11. '滟滟随波千万里,何处春江无月明!',
  12. '江流宛转绕芳甸,月照花林皆似霰。',
  13. '空里流霜不觉飞,汀上白沙看不见。',
  14. '(带有特殊字符)',
  15. '[唐诗三百首]',
  16. '字母匹配: a',
  17. '字母匹配: A',
  18. ]
  19. };
  20. },

  1. methods: {
  2. handleSearch() {
  3. // 获取所有的li标签
  4. let allLi = document.getElementsByClassName('li')
  5. // 当前搜索的值
  6. let curSearchVal = this.search
  7. // 先定义一个空的正则
  8. let regReplace = ''
  9. // 对搜索关键字进行遍历,如果包含特殊字符,进行转义
  10. for(let i=0;i<curSearchVal.length;i++){
  11. if( this.specialChar.includes(curSearchVal[i])) {
  12. regReplace += `\\${curSearchVal[i]}`
  13. }else {
  14. regReplace += `${curSearchVal[i]}`
  15. }
  16. }
  17. //不区分大小写的匹配特殊字符(也可 new RegExp(regReplace,'ig') 进行全局匹配 )
  18. let searchReg = new RegExp(regReplace,'i');
  19. // 循环,进行匹配
  20. allLi.forEach( li => {
  21. // 获取每项li标签的文本内容
  22. let text = li.innerText
  23. // 内容替换
  24. li.innerHTML = text.replace(searchReg, value => {
  25. return `<span style="color: red; background: yellow;">${value}</span>`
  26. })
  27. })
  28. }
  29. },

也可在标签上通过 v-html 来进行高亮显示,跟上面基本没什么区别

  1. <el-table :data="data" border>
  2. <el-table-column label="序号" prop="index" width="80"></el-table-column>
  3. <el-table-column label="名称" prop="name" width="100">
  4. <template slot-scope="{row}">
  5. <div v-html="getReplace(row.name)"></div>
  6. </template>
  7. </el-table-column>
  8. </el-table>
  1. getReplace(str) {
  2. // 如果有搜索
  3. if(this.searchVal) {
  4. let keyWords = this.searchVal
  5. // 同样定义空的正则
  6. let newKey = ''
  7. // 需要转义的特殊字符处理
  8. for(let i = 0; i < keyWords.length; i ++ ){
  9. if(this.specialChar.includes(keyWords[i])) {
  10. newKey += `\\${keyWords[i]}`
  11. }else {
  12. newKey += keyWords[i]
  13. }
  14. }
  15. let searchReg = new RegExp(newKey,'i'); //不区分大小写的匹配特殊字符
  16. let text = str.replace(searchReg, (value) => {
  17. return '<span style="color: red; background: #FFFF00;">' + value + "</span>"
  18. })
  19. return text
  20. }else {
  21. // 无搜索
  22. return str
  23. }
  24. }

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/415402
推荐阅读