这是我的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
使用它。
答案 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";
});
});
答案 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>"));
}
});
基本上替换文本节点而不仅仅是文本节点。
你应该考虑是否有某种方法可以缩小原始过滤器的范围。解析整个页面通常是一个坏主意。