Jquery String Replace无法在之前和之后添加html元素

时间:2011-06-27 10:57:35

标签: javascript jquery string replace

这是我的jquery脚本,它将字符串替换为新字符串:

$("*").contents().each(function() {
if(this.nodeType == 3)
    this.nodeValue = this.nodeValue.replace("1.(800).123.1234", "new");
});

工作示例:http://jsfiddle.net/webdesignerart/eKRGT/

但我想在字符串html元素之前和之后添加,例如 new

当我这样做时:

  this.nodeValue = this.nodeValue.replace("1.(800).123.1234", "<b>new</b>");

结果来了:

<b>new</b>

我想要输出: new

我想在替换期间允许html标记。

是jquery .append使用它。

2 个答案:

答案 0 :(得分:0)

您正在替换始终只是文字TextNode元素的内容。要使文本变为粗体,您需要创建另一个包含b的元素TextNode。一种方法是使用jQuery中的wrap()

$("*").contents().each(function() {
    var me = this;
    if(this.nodeType == 3)
        this.nodeValue = this.nodeValue.replace("1.(800).123.1234", function(a){
            $(me).wrap('<b />');
            return "new";            
        });
});

示例:http://jsfiddle.net/niklasvh/eLkZp/

答案 1 :(得分:0)

这应该有效:

$("*").contents().each(function() {
    var me = this;
    if(this.nodeType == 3 
       && this.nodeValue.indexOf("1.(800).123.1234")>-1){

        $(this).replaceWith(this.nodeValue.replace("1.(800).123.1234", "<b>new</b>"));  
    }        
});

http://jsfiddle.net/eLkZp/20/

基本上替换文本节点而不仅仅是文本节点。

你应该考虑是否有某种方法可以缩小原始过滤器的范围。解析整个页面通常是一个坏主意。