Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript清理全局搜索和替换?_Javascript_Replace - Fatal编程技术网

使用JavaScript清理全局搜索和替换?

使用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); }); 它在静态页面上工作得

我正在编写一个小书签集,将当前页面中的所有设备转换为另一个。我严重依赖regexp,并且使用Jquery简化了工作

现在,我就像一头大肥猪,替换了所有的身体:

$("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;

});