1

これは何度も聞かれているようです。しかし、残念ながら、私は簡単な解決策に出くわしていません。ほとんどのソリューションは、div内の複数のノードを中心に展開します。

だからここに問題があります。私は次のマークアップを持っています:

<div class="test">Text1<span></span></div>

スパンタグとスパンタグにアタッチされたイベントハンドラーに影響を与えずに、「Text1」を「Text2」に置き換える必要があります。

のような$('.test')html('Text2<span></span>')ことをすると、テキストが置き換えられます。ただし、spanタグのイベントハンドラーを削除します。これは望ましくありません。私はこれのための迅速で効率的な方法を探しています。

4

4 に答える 4

4

置換可能なテキストをタグでラップします。

<div class="test"><span class="test-text">Text1</span><span></span></div>
于 2012-04-09T19:23:26.703 に答える
3

コンテンツを使用してテキストノード自体にアクセスできます。要素がテキストで始まることがわかっている場合は、次のように実行できます。

$($('.test').contents()[0]).replaceWith('New Text')​;

これで、テキストノードの配列内の場所がわからない場合は、次の方法でフィルタリングできます。

return this.nodeType === 3;

テキスト値を比較します(知っている場合)。

フィドル

于 2012-04-09T19:28:25.810 に答える
0

.liveまたは関数を使用してイベントハンドラーを追加する場合.on(jQueryのバージョンによって異なります).html('Text2')は問題なく機能します。

于 2012-04-09T19:25:34.160 に答える
0

置き換えられるテキストが常に既存のスパンの前にあり、それが常にであり、ラップされていないtextNodeであると仮定すると、次のようになりfirstChild ます

$('.test').click(
    function() {
        this.firstChild.nodeValue = 'Text2';
    });​

JSフィドルデモ

要素内のどこにあるかに関係なく、最初のtextNodeのみが変更されるようにするには.test

$('.test').click(
    function(e) {
        var newText = 'Text2',
            children = e.target.childNodes;
        for (var i=0,len=children.length;i<len;i++){
            if (children[i].nodeName == '#text'){
                children[i].nodeValue = newText;
                return false;
            }
        }
    });​

JSフィドルデモ

于 2012-04-09T19:31:07.387 に答える