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

218 阅读1分钟

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

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

解决代码

/**
 * 高亮函数
 * @param text 文本
 * @param searchKeywords  关键词
 * @param splitStr 关键词分隔符
 */
export function hightLight(text,searchKeywords,splitStr = " ") {
  // 取出前后空格 去除中间多余的空格保留一个
  let searchArray = searchKeywords.trim().replace(/\s+/g, " ").split(splitStr)

  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'), `<code>${keyword}</code>`);
      //把原来~代表的html标签,再替换回来
      text = text.replace(/{~}/g, function () {
        num++;
        return dealHtml[num];  //进行依次替换
      });
    }
  })
  return text
}