我想用jquery找到一些特定的文本,并用包含一些HTML的更新版本替换它。
我尝试了this,当我只使用文字时,它正在运行:
<script type="text/javascript" >
jQuery(document).ready(function(){
jQuery("*").contents().each(function() {
if(this.nodeType == 3)
this.nodeValue = this.nodeValue.replace("hello mum", "bye bye mum");
});
})
</script>
但是,如果我添加一些文本+ HTML来替换目标表达式,它会被“格式化”并被读作纯文本...
你知道男人解决这个问题吗? 我可以在替换表达式中添加HTML吗?
感谢。
答案 0 :(得分:4)
jQuery在文本节点方面有点问题。此外,由于您直接操作文本节点的内容,因此所有HTML都将被视为文本。
我能想到的最简单的解决方案是有点hacky,但效果很好:)。
用虚拟HTML元素替换文本节点。然后用替换HTML替换该虚拟HTML元素。
var isTextNode = this.nodeType == 3;
var matchesText = this.nodeValue.indexOf('hello mum') > -1;
if(isTextNode && matchesText) {
// replace text node with dummy element
// so jQuery can be used
var dummy = $('<b>');
this.parentNode.replaceChild(dummy[0], this);
dummy.replaceWith('my <b>awesome</b> html now <i>works</i>');
}
答案 1 :(得分:0)
this.nodeValue = this.nodeValue.replace(“hello mum”,“bye bye mum”);
更改为
this.nodeValue = this.nodeValue.replaceWith(“hello mum”,“
some html stuff
”);