2

contenteditable="true"いくつかのhtmlを含むdiv( )があります。特定のクラスのリンクを除いて、div全体のテキストを置き換えようとしています。

私は試した:

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

しかし、それは何も置き換えません。

4

4 に答える 4

3

.htmljQueryで定義された関数なので設定したくありません。使用する

$('#text :not(a.selected)').each(function() {
  $(this).html(replaceFunction($(this).text())));
});

編集:値として使用していることにも気付き.textましたが、それも関数です。.text()文字列として扱うのではなく、呼び出すように上記を修正しました。

EDIT2: また、セレクターが正しくないため、上記で修正しました。別の要素のページで id を 2 回使用してはdiv#textなら#textないためです。text

于 2012-10-09T22:10:24.550 に答える
3

セレクターは何も返しません。あなたは、「class=selected の要素ではない id=text の div を与える」と言っています。.children()div の子を取得するために使用します。

.html.textメソッドです。それらに割り当てることはできません。取得と設定のためのオーバーロードがあります:
.html()html を取得します。
.html(newhtml)html を設定します。

次のようなものが必要です。

$('div#text').children().not('a.selected').each(function() {
    $(this).html(replaceFunction($(this).text()));
});
于 2012-10-09T22:11:48.960 に答える
0

これを試して

$(this).html(replaceFunction($(this).text())));

あなたはdivのhtmlを設定していません..しかし、あなたはそれに値を割り当てているようです..何もしません..

また欠落() している.text()

于 2012-10-09T22:12:15.477 に答える
0

あなたのコードでは、jQuery は ID "text" を持つすべての div を検索し (1 つある)、結果セットから "selected" のクラスを持つすべてのアンカー要素を削除します (何もありません)。

div#text 内ですべてのコンテンツがあらゆる種類の要素でラップされている場合は、これを試してください。

$('div#text').children().not('a.selected').each(function() {
    $(this).html = replaceFunction($(this).text))
});

またはパフォーマンスは低いが、すべてのレベルの発見

$('div#text').find("*").not('a.selected').each(function() {
    $(this).html = replaceFunction($(this).text))
});

シンプルなループでバニラ JS を使用して、すべての HTML ノード (テキスト ノードを含む) をスキャンすることもできます。

于 2012-10-09T22:19:01.210 に答える