2

contenteditable="true"いくつかのテキストといくつかの html を含むdiv ( ) があります。特定のクラスとのリンクを除いて、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'

出力として、replace() 関数の結果に置き換えたい"test "と思い" test3"ますが、a.selected 内のテキストはそのままです。

編集

div 内に他の html が存在する可能性がありますが、無視できます。replace 関数が大文字に切り替える場合、必要な入力 ant outtut は次のとおりです。

入力:'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/

4

2 に答える 2

1

そういう意味ですか?

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

デモ: http://jsfiddle.net/ApgEc/


関数にHTML を挿入できるようにするにreplaceは、コードを書き直す必要があります。

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

デモ: http://jsfiddle.net/ApgEc/3/

于 2012-10-10T08:29:26.657 に答える
1

ワーキングデモ

$(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()));
    });
});
于 2012-10-10T08:35:39.077 に答える