3

DOM ツリーから空のタグをすべて削除しようとしています。Empty は、完全に空 ( のように<a></a>) といくつかの空白がある ( のように<a> ...</a>) の両方を意味します。また、内側の空のタグも削除する必要があります。例えば

<p style="text-align:right;">     <a> </a>  <a></a></p><p>Hello</p>

去るべき

<p>Hello</p>

空を削除した後も<a> </a> <a></a><p style="text-align:right;"> </p>が残り、削除する必要があるためです。

私がやっていること:

$.(".container>*:empty").remove();

そして結果は混乱した。私はそのようなコードでデバッグを開始しました:

console.log($.(".container>*:empty").size());

1) 文字列:

Well, though it looks like a paragraph, it's not o_O.
0 (I'm wrapping string in global wrapper .container)

2) 文字列

<a></a><a>Well, though it looks like a paragraph, it's not o_O.</a>
1

3) 文字列

<a> </a><a>Well, though it looks like a paragraph, it's not o_O.</a>
0 (It seems one whitespace makes a non-empty)

4) 文字列

<p> <a></a></p>  <a>Well, though it looks like a paragraph, it's not o_O.</a>
0 (<a></a> is not selected as empty (maybe 'cause it's inside of < p>). 
   Also p is not selected, besides it contains only empty < a>)

私の質問は次のとおりです。

  • :empty空のタグと 1-N の空白の両方を選択する方法は?
  • :emptyすべてのオブジェクト内のすべての空のタグを選択する方法は?

私の考えはすることです${"*:empty"}.remove() while $('*:empty').size() > 0

アップデート:

do {
$(".container *").filter(function() {
    return $.trim(this.innerHTML) === ""
}).remove();
} while ($(".container *").filter(function() {
return $.trim(this.innerHTML) === ""
}).size() > 0)
console.log($(".container").html())

このコードを以下に適用します。

<p> <p> <a> <a>  <a><br><hr></a> </p>  <a>Well, though it looks like a paragraph, it's not o_O.</a></p>

そして、次のようになります。

<p>   <a>Well, though it looks like a paragraph, it's not o_O.</a></p>
4

1 に答える 1