HTML タグのネストされたセットがあり、すべてのタグとその子をテキストなしで削除したいと考えています。
例:
<div id="mydiv">
<span></span>
<span><br></span>
<span> <span><br></span> </span>
<span> <span><br> <span></span> </span> </span>
<span> <img src="someimg.jpg" width="100" height="100"> </span>
<span>some text</span>
</div>
だから私は、画像とテキストを含むスパンを残し、他の人が去ることを望んでいます。
関数の後にその結果が必要です:
<div id="mydiv">
<span> <img src="someimg.jpg" width="100" height="100" /> </span>
<span>some text</span>
</div>
これは、JavaScript または jQuery のメソッド .children() を使用して再帰的に実行する必要があることがわかりました。使用したかったコードは次のとおりですが、再帰を構築する方法がわかりません。
var remove_filter = function () {
children= $(this).children();
for (var i = -1, l = children.length; ++i < l;) {
if ($(children[i]).text() == "") {
$(children[i]).remove();
}
//may be recursion here
//else if(){
//}
}
return $(this).text() == "" && $(this).children().length == 0;
}
$('#mydiv').find('span').filter(remove_filter).remove();
このコードは壊れており、空のスパンを削除して残しています...再帰で結果を得るにはどうすればよいですか?
編集済み
ここに私の jsfiddle があります: http://jsfiddle.net/EGVQH/
2回編集
正解にバグが見つかりましたが、小さいです。次のようなコードがある場合:
<div id="mydiv">
<span> <br> Some text</span>
<span> <span><br> <span></span> </span> </span>
<span> <img src="someimg.jpg" width="100" height="100"> </span>
<span>some text</span>
</div>
私はそれが次のようになると仮定します:
<div id="mydiv">
<span> Some text</span>
<span> <img src="someimg.jpg" width="100" height="100" /> </span>
<span>some text</span>
</div>
私の質問に対する以前の「正しい」答えは、で間違った結果を出していました<span> <br> Some text</span>
。少しテストした後、他の答えは間違っていました。
私の JSfiddle を参照してください: http://jsfiddle.net/EGVQH/2/