使用JavaScript清理全局搜索和替换?
我正在编写一个小书签集,将当前页面中的所有设备转换为另一个。我严重依赖regexp,并且使用Jquery简化了工作 现在,我就像一头大肥猪,替换了所有的身体:使用JavaScript清理全局搜索和替换?,javascript,replace,Javascript,Replace,我正在编写一个小书签集,将当前页面中的所有设备转换为另一个。我严重依赖regexp,并且使用Jquery简化了工作 现在,我就像一头大肥猪,替换了所有的身体: $("body").children().each(function(){ var $this = $(this); var h = $.html().replace(/eyes_hurting_regexp/g, "my_super_result"); $this.html(h); }); 它在静态页面上工作得
$("body").children().each(function(){
var $this = $(this);
var h = $.html().replace(/eyes_hurting_regexp/g, "my_super_result");
$this.html(h);
});
它在静态页面上工作得很好,但如果涉及js事件,这将是一个启示
我能想到的唯一方法是遍历所有节点,检查它是否只包含文本,然后替换文本。对于繁重的HTML标记,我担心性能
有什么想法吗?不幸的是,一步一步地浏览每个文本节点是唯一可靠的方法。这在过去对我很有效:()
不幸的是,一步一步地遍历每个文本节点是唯一可靠的方法。这在过去对我很有效:()
我根据自己的需要修改了脚本,并将新版本放在此处,以防有人需要新功能:
- 可以处理替换回调函数
- 外部节点黑名单
- 一些注释以便代码不会伤害其他人的眼睛:-)
findAndReplace(/foo/gi, "bar", function(text_node, pattern, repl){
var wrap = document.createElement('span');
var txt = document.createTextNode(text_node.data.replace(pattern, repl));
wrap.appendChild(txt);
return wrap;
});
再次感谢J-p,这段非常有用的代码。我根据自己的需要修改了脚本,并将新版本放在这里,以防有人需要新功能:
- 可以处理替换回调函数
- 外部节点黑名单
- 一些注释以便代码不会伤害其他人的眼睛:-)
findAndReplace(/foo/gi, "bar", function(text_node, pattern, repl){
var wrap = document.createElement('span');
var txt = document.createTextNode(text_node.data.replace(pattern, repl));
wrap.appendChild(txt);
return wrap;
});
再次感谢J-p,这段非常有用的代码。哇,我可以投两次票。完整的算法和陷阱的确认。非常感谢。:-!顺便说一句,你建议我用JQuery重写它吗?我忘了提;确保“searchText”是一个正则表达式-如果它是一个字符串,它将被“转换”为正则表达式,但这是需要注意的-像“[”和“{”和“?”这样的字符将被逐字理解。(如果没有转义)我已经在IE、FF和Chrome上测试过了,看起来效果不错。jQuery在文本节点遍历方面提供的功能很少,所以我就不用麻烦重写它了。:)哇,我可以投两次票。完整的算法和陷阱的确认。非常感谢。:-!顺便问一句,你建议我用jQuery重写它吗?我忘了注意:确保“searchText”是一个正则表达式-如果它是一个字符串,它将被“转换”为正则表达式,但需要注意的是-像“[”和“{”和“?”这样的字符将被逐字理解。(如果没有转义)我已经在IE、FF和Chrome中进行了测试,似乎效果很好。jQuery在文本节点遍历方面提供的功能很少,因此我不会费心重写它。:)
findAndReplace(/foo/gi, "bar", function(text_node, pattern, repl){
var wrap = document.createElement('span');
var txt = document.createTextNode(text_node.data.replace(pattern, repl));
wrap.appendChild(txt);
return wrap;
});