1

HTML文字列から空の要素を削除したいと思います。私は次のようなものを実行できることを知っています:

$('p').each(function(index, item) {
    if($.trim($(item).text()) === "") {
        $(item).remove();
    }
});

問題は、p だけでなく、すべての空のノードを削除したいということです。<p><span></span></p>また、空の要素しか含まれていないため、スクリプトで p ノードを空と見なす必要があります。そのようなものの簡単な実装はありますか?

[編集] 追加するのを忘れました: jQuery を使用できますが、トラバースして編集したい html は文字列であり、実際のドキュメントではありません。では、どうすればこの操作を行うことができますか?使用してみvar html = $.parseHTML('<p><span></span></p>')ましたが、各ループの後でも同じ文字列が得られます...

4

5 に答える 5

1

これは、バニラ JS 用のPaul の関数の1 週間です ( Element.matches() polyfillが必要です)。

function removeEmpty(parent) {
    // for each child
    [].forEach.call(parent.children, function(child) {
        // repeat operation
        removeEmpty(child);

        // remove if it matches selector
        if (child.matches(':empty')) {
            parent.removeChild(child);
        }
    });
}
于 2016-10-14T18:43:10.363 に答える
0

次のようなものを試してください

do {
    empty = $("*:empty");
    count = empty.length;
    empty.remove();
}
while ( count > 0 );

再帰的ではなく反復的ですが、うまくいくはずです

于 2013-10-25T05:35:36.040 に答える
0

実際、あなたのコードは正常に動作しています。このフィドルを参照してください。

内部にコンテンツがあるだけで表示されます。その後、何をしたいですか?

HTML

<p>hi 1</p>
<p></p>
<p><span>hi 2</span></p>
<p><span></span></p>

脚本

$('p').each(function(index, item) {
    if($.trim($(item).text()) === "") {
        $(item).remove();
    }
});
于 2013-10-25T05:37:31.697 に答える
0

以下のコードを使用してこれを実現できます:-

function removeEmptyTag(root) {
    var $root = $(root);
    $root.contents().each(function () {
    if (this.nodeType === 1) {
        removeEmptyTag(this);
    }
    });

    if (!$root.is("area,base,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr") && !$root.html().trim().length) {
    $root.remove();
    }
}

removeEmptyTag("#divIdHere");

フィドル

于 2013-10-25T05:43:33.263 に答える