如何使用JQuery替换语句,但排除一个类
How to use replace statements with JQuery but exclude one class?
我有一个搜索引擎。当您被引导到下一页时,搜索栏中的关键字将在页面上突出显示。但是,有一个特殊的链接我不想突出显示。高亮笔弄乱了链接的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"));
这已经在少量数据上进行了测试,所以我不知道它是否足够有效。
相关文章:
- 有没有一个插件可以从特定的页面/帖子中排除一些JavaScripts
- 如何填充下拉列表,从javascript中的另一个下拉列表中排除任何一个选项
- 为什么下面的if语句排除了一个'It’s和其他的一样
- 从数组中排除值后,获取下一个最高日期值
- gulp.src 排除与模式匹配的所有文件,除了一个 - 不工作
- 另一个排除指令内的角度排除指令
- socket.io 给出了两个答案,但只有一个被排除在外
- 生成数字,但在 javascript 中排除一个数字
- 查找带有 _id 的字符串并排除一个值
- 查找一个项目是否在数组中,并使用angularjs将其从选择选项中排除
- Javascript日期选择器排除了周末,一个日期数组&每周特定的一天
- JQuery:如何从.serialize()中排除一个选项
- 匹配一个“"在特定图案之后,同时排除该图案.(JavaScript中的lookbacking)
- Jquery从中排除一个事件
- Js替换和Regex排除一个单词
- Jquery排除单击时的第一个td事件
- 如何生成一个只有7个字符的UID,并像imgur.com一样排除重复
- Youtube API查询;从提要中排除一个视频
- 匹配字符串中的一个模式但排除另一个模式的Javascript正则表达式
- TypeError: undefined不是一个函数——需要排除故障