查找文本(A)并将其替换为文本(B)+ HTML

时间:2010-07-29 18:01:14

标签: jquery text replace

我想用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吗?

感谢。

2 个答案:

答案 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

”);