3

CKEditor 内には多くの要素があり、イベントがフックされ、.data() メソッドを使用してデータがバインドされています。この HTML ブロックから   を削除したいと思います。私は単に行うことができます

$('body').html($('body').html().replace(/&nbsp\;/, ''));

しかし、これは HTML をリセットするため、すべての要素を効果的に再作成します。つまり、すべてのイベントとデータを再バインドする必要があります。私が現在やっていることはこれです:

if ($body.html().indexOf(' ') > -1) {
    $body.find(':*:not(:has(*))').each(function(){
            // These nodes don't have any children so contain text or nothing
            $(this).html($(this).html().replace(/&nbsp\;/,''));
    });
}

これにより、次のように HTML の   が置き換えられます。

     <p>Foo&nbsp;Bar</p>

しかし、次のような HTML ではありません。

     <div>Foo&nbsp;<span>Bar</span></div>

誰でもこれを行うためのより良い方法を考えることができますか?

ありがとう、

ジョー

4

2 に答える 2

2

ターゲット要素内のすべてのテキスト ノードを選択し、それらをループして置換します。

$("*").contents().filter(function(){
    return this.nodeType === 3;
}).each(function(){
    // do your replace here using this.nodeValue
});

可能であれば、要素のより小さなサブセットにフィルタリングすることを強くお勧めします'*''body *'おそらく遅くなります。

于 2013-01-25T19:10:54.133 に答える
0

最初のコード$('body').html($('body').html().replace(/&nbsp\;/, ''));は正しいようです。gすべてのオカレンスを置き換えるために最後に追加する必要があり、ここのようにドキュメントの読み込み時にこの関数を呼び出すようにしてください..

$('document').ready(function () { $('body').html($('body').html().replace(/&nbsp\;/g, '')); });

于 2013-01-25T19:17:29.300 に答える