如何使用JQuery替换语句,但排除一个类

How to use replace statements with JQuery but exclude one class?

本文关键字:一个 排除 JQuery 何使用 替换 语句      更新时间:2023-09-26

我有一个搜索引擎。当您被引导到下一页时,搜索栏中的关键字将在页面上突出显示。但是,有一个特殊的链接我不想突出显示。高亮笔弄乱了链接的url,所以我得到一个链接:<a href='page.php?url=ha<mark>ppy</mark>'</a> ha<mark>ppy</mark></a>

这是我使用的代码:

function term(word) {
    var src_str = $("#page").html();
var term = word;
term = term.replace(/('s+)/,"(<[^>]+>)*$1(<[^>]+>)*");
var pattern = new RegExp("("+term+")", "gi");
src_str = src_str.replace(pattern, "<mark>$1</mark>");
src_str = src_str.replace(/(<mark>[^<>]*)((<[^>]+>)+)([^<>]*<'/mark>)/,"$1</mark>$2<mark>$4");
$("#page").html(src_str);
}

我希望代码具有相同的替换功能,但不替换.topic_link

编辑

问题不仅存在于.topic_link。该代码影响页面的所有html。所以,如果我搜索"div",所有外部的HTML代码都会受到影响。是否有一种方法只影响文档的文本而不影响HTML?

似乎必须遍历子节点并检查它们的节点类型。因为每个子节点都可以有其他子节点,所以必须应用递归:

function changeText(word,element) {   
  $.each(element.contents(),function(){
    if(this.nodeType == 1)
      changeText(word,$(this));
    else if(this.nodeType == 3)
    {
      $(this).replaceWith(term(word,$(this).text()));
    }
  });
}
function term(word,src_str) {
  var term = word;
  term = term.replace(/('s+)/,"(<[^>]+>)*$1(<[^>]+>)*");
  var pattern = new RegExp("("+term+")", "gi");
  src_str = src_str.replace(pattern, "<mark>$1</mark>");
  src_str = src_str.replace(/(<mark>[^<>]*)((<[^>]+>)+)([^<>]*<'/mark>)/,"$1</mark>$2<mark>$4");
  return src_str;
}

现在调用:

changeText("YourWord",$("#page"));

这已经在少量数据上进行了测试,所以我不知道它是否足够有效。