javascript - 如何在 JQuery 中使用替换语句但排除一个类?

标签 javascript jquery

我有一个搜索引擎。当您转到下一页时,搜索栏中的关键字会在页面上突出显示。但是,有一个我不想突出显示的特定链接。荧光笔弄乱了链接网址,所以我得到一个链接,如:<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?

最佳答案

看来你必须遍历 child 并检查他们的 node types 。 由于每个 child 都可以有其他 child ,因此必须应用递归:

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"));

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

关于javascript - 如何在 JQuery 中使用替换语句但排除一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38982886/

相关文章:

javascript - 将 Bluebird Promisifyall 与 Mongoose 结合使用

javascript - 加载器图标不断显示在我的 App.JS 中

javascript - 切换类 React js

javascript - False 或 null 用于错误检查 -Javascript

javascript - Google Maps API v3 返回灰色 block

javascript - 每滚动 1 像素添加 1 像素的填充(底部)——jQuery 或 Javascript

javascript - jQuery - 设置按钮标题

javascript - 现场呈现 jquery 工具提示的问题

php - .ajax() 调用在之前的 .ajax() 调用完成之前不会完成?

javascript - 选择元素的子集,并将它们包装在 div 中