前端Vue开发,多关键字搜索时,搜索结果高亮显示(解决输入英文时,会错误的把html标签渲染的问题)

29 篇文章 2 订阅
3 篇文章 0 订阅

问题背景:

网上搜索关于搜索结果高亮显示,基本上都是单一关键字搜索,或者多关键字搜索,但是没有解决
输入英文字符时,把html标签渲染出来的问题,比如在进行多关键字搜索时,可能会进行a;s的搜索,
就可能把span标签进行解析再高亮显示,这样就会出现数据渲染时带出html的高亮。

报错如图所示:

在这里插入图片描述

解决思路

因为是多关键字搜索,首先考虑的是把关键词转换为一个数据,把关键词和文本信息进行一次循环比对,
发现是重复的,就进行高亮显示,如果之前的第一个关键词已经关键词显示,那么此时文本已经存在了
html标签,这个时候把html标签转化为一个特殊的符号,把这些所有的特殊符号的代表内容放如到一个数组内,
再紧接着高亮渲染html标签,完成后,把原先特殊符号进行替换,依次替换成需要显示的html标签,即可。

解决方法

通过搜索归纳,我们可以使用如下的方法解决多关键字搜索结果高亮的问题。

<div id="content">
    aaaaassssaaassddddwwwssaaa
</div>

<script>
    function hightLight() {
        let textEle = document.getElementById('content');  //获取文本内容;
        var text = textEle.innerHTML
        let searchKeywords = 's;a;w';  //为了方便演示,这里关键词直接写死
        searchKeywords = searchKeywords.replace(/;|;/g, ',');
        let searchArray = [];
        searchArray = searchKeywords.split(',');//把关键词列为一个数组

        searchArray.forEach((keyword) => {  //循环关键词数组
            if (keyword && text.indexOf(keyword) !== -1) {
                let regHtml = new RegExp("\<.*?\>", "ig"); //定义html正则
                let dealHtml = text.match(regHtml);  //符合的html定义一个数组
                let num = -1;
                text = text.replace(regHtml, '{~}'); //用一个特殊字符进行替换
                text = text.replace(new RegExp(keyword, 'g'), `<span style="color:#1890FF;">${keyword}</span>`);
                //把原来~代表的html标签,再替换回来
                text = text.replace(/{~}/g, function () {
                    num++;
                    return dealHtml[num];  //进行依次替换
                });
            }
        })

        textEle.innerHTML = text;

    }
    hightLight();
</script>

效果图

在这里插入图片描述
可以看到把所有的英文都高亮的出来,并且没有显示html.

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值