将HTML添加到通过node.nodeValue提取的文本节点

我想知道在提取contents()并在其中的所有文本节点上执行替换后,是否有任何方法可以输出HTML。

jsFiddle: http : //jsfiddle.net/bikerabhinav/t8835/1/

HTML:

 
Hi, this is a Textnode _link_
this is Textnode number 2
element node

JS:

 $('#msg').contents().each(function() { if(this.nodeType == 3) { var u = this.nodeValue; var reg = /_link_/g; this.nodeValue = u.replace(reg,'Google'); } }); 

OUTPUT:

 Hi, this is a Textnode Google this is Textnode number 2 element node 

我需要的:

 Hi, this is a Textnode Google
this is Textnode number 2
element node

PS:

  • 我故意不使用html()来获取内容,执行.replace ,然后再次使用html()来设置值,因为使用此代码段的原始应用程序具有复杂的结构(即它上面的DOM元素)将运行,加上要匹配和替换的字符串,有超过30个表达式需要搜索和替换,所有都是特殊字符,如笑脸代码)。

    但是,只有DOM中的文本节点具有要替换的字符串,并且保持外部html结构和元素是必要的。

上面的代码有效,它只是不在HTML中。 有没有办法实现这个目标?

如果我正确理解你,我相信这样做:

 $('#msg').contents().each(function() { if(this.nodeType == 3) { var u = this.nodeValue; var reg = /_link_/g; $(this).replaceWith(u.replace(reg,'Google')); } }); 

http://jsfiddle.net/t8835/2/

您的问题是您将HTML插入文本节点(因此它被视为文本)。 您不想使用Google替换_link_ ,而是取出文本节点,从_link_开始删除文本,附加一个HTML节点(包含锚点)并将_link_之后的所有文本_link_的新文本节点中。