vue中使用js实现搜索结果关键字高亮

实现效果是,搜索框中输入一个或者多个关键字,该关键字会在搜索结果中高亮显示出来,下面是两种需求(前提:我们这里搜索是和百度一样的全局搜索,只要有一个关键字匹配就会返回相应的搜索结果)

需求一:只会高亮完全匹配的关键字

比如:输入’英语‘,则不会高亮有’语‘的搜索结果,只会高亮’英语‘
两个字连在一起的搜索结果
解释: 使用了正则来匹配关键字,在搜索结果中一旦匹配中搜索词,则标红高亮
代码

methods:{
      // 高亮搜索词
      brightenKeyword(val, keyword) {
        const Reg = new RegExp(keyword, 'i');
        let res = '';
        if (val) {
             res = val.replace(Reg, `<span style="color: red;">${keyword}</span>`);
           return res;
         }
      },
      }

需求二:会高亮搜索结果中所有关键字

比如:输入’英语‘,搜索结果中只要包括其中一个关键字就都会高亮
在这里插入图片描述
在这里插入图片描述
解释:将搜索结果中的每一个字都与搜索关键字中的字进行对比,一旦有匹配上的,该搜索结果中的该字标红,如果没有匹配上则不变
代码

methods:{
      // 高亮搜索词
      brightenKeyword(val, keyword) {
        let arrVal = val.split('')
        let res = '';
        for (let i = 0; i < arrVal.length; i++) {
            let isExist = keyword.indexOf(arrVal[i])
            if (isExist != -1) {
              res += `<span style="color: red;">${arrVal[i]}</span>`;
            } else {
              res += arrVal[i]
            }
        }
            return res;
      },
      }

使用

result:搜索结果中需要标红的内容
keyWords:搜索输入框中的关键字

<div v-html="brightenKeyword(result,keyWords)"></div>

结束

事实上需求二也包括了需求一,只是需求一提供了一个正则的写法,这是我的写法,如果大家有其他的好写法欢迎与我交流~

猜你喜欢

转载自blog.csdn.net/wh13821662259/article/details/114652229