更改文本节点的内容

时间:2012-10-10 08:20:58

标签: jquery contenteditable

我有一个div(contenteditable="true"),其中包含一些文字和一些HTML。我正在尝试替换整个div 中的文本,除了在某个类的链接中。

我试过了:

$('div#text').contents().not('a.selected').each(function() {
    $(this).html(replace($(this).text()));
});

但似乎$(this).html()null

div的测试内容为'test <a class="selected">test2</a> test3'

作为输出,我希望"test "" test3"替换为replace()函数的结果,而a.selected中的文本不受影响。

修改

div中可能还有其他一些html,可以忽略它。如果替换函数将事物切换为大写,这里是所需的输入ant ouptut:

输入:'test <a class="selected">test2</a> <a>test3</a>'

输出:'TEST <a class="selected">test2</a> TEST3'

编辑2

这似乎有效,但不是当replace()返回一些HTML

$("div#text").contents().not("a.selected").each(function() {
    this.nodeValue = replace(this.nodeValue);
});

演示:http://jsfiddle.net/ApgEc/2/

2 个答案:

答案 0 :(得分:1)

你的意思是什么?

$("div").contents().not("a.selected").each(function() {
    this.nodeValue = replace(this.nodeValue);
});​

DEMO: http://jsfiddle.net/ApgEc/


为了能够在replace函数中插入HTML,我们需要重写代码:

$("div").contents().map(function() {
    if (!$(this).is("a.selected")) {
        return replace(this.nodeValue);
    }
    return this.outerHTML;
}).appendTo($("div").empty());​

DEMO: http://jsfiddle.net/ApgEc/3/

答案 1 :(得分:1)

Working Demo

$(function() {
    $('#test').contents().each(function() {
        var $this = $(this);
        if ($this.is('a.selected')) return true;
        if(this.wholeText)
            this.wholeText = replace(this.wholeText);
        else $this.html(replace($this.html()));
    });
});