0

divのhtmlから非テキストノード(BR、空のタグ、nbsp)を削除するにはどうすればよいですか?<p>ただし、最初のテキストノードが表示される前に発生するノードのみです。通常の文字列から先頭の空白を削除するのと同じですが、ここではHTML文字列から先頭の空白を削除します。

正規表現を使用してみましたが、このアプローチでは問題が発生することがよくあります。NodeTypeとJQueryを使ってやりたいです。誰かが例を持っているなら、共有してください。

ありがとう!

UPDATE:

次のDIVを取ります:-

<div id="foo">
        <div>
            <div>
                <p>
                </p>
                <p>
                    &nbsp;
                </p>
                <br/>
                <p>
                    this is a test</p>
                <p>
                    &nbsp;
                </p>
                <br />
                <br>
                <p>
                    this is a fast test
                </p>
            </div>
        </div>
    </div>

「foo」を空白除去関数に渡すと、次のようになります。-

<div id="foo">
        <div>
            <div>
                <p>
                    this is a test</p>
                <p>
                    &nbsp;
                </p>
                <br />
                <br>
                <p>
                    this is a fast test
                </p>
            </div>
        </div>
    </div>
4

1 に答える 1

2

このような何かがそれを行う必要があります:

var $contents = $('#foo').contents();
var stopFiltering = false;

$contents.filter(function() {
    var isEmpty = $.trim($(this).text()) == '' ||
                  this.tagName == "BR";
    var shouldFilter = !stopFiltering && isEmpty;
    stopFiltering = stopFiltering || !isEmpty;
    return shouldFilter;
}).remove();

これはfilter関数の適応です。各要素(テキストノードを含む)は、「空」(isEmpty)についてテストされます。最初の空でないノードが表示された後、shouldFilteringfalseに設定されます。このように、フィルタリング条件は要件を表します。最初の空でないノードの前に空のノードと要素を選択します。

実際の動作をご覧ください

更新: 再帰的ソリューションはここにあります。上記を関数にパッケージ化しTrimElements、ターゲット要素自体を処理する前に、ターゲット要素のすべての子に再帰します。

于 2011-09-22T06:50:56.853 に答える