我有一個嵌套的html標籤集,我想刪除所有標籤和他們的孩子沒有文字。jQuery遞歸刪除空的子女
例子:
<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() 這裏完成遞歸是我的代碼想用,但我想不出如何建立遞歸:
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();
這段代碼被打破,它會刪除並留下空跨度... 的我如何獲得我的遞歸結果呢?
EDITED
這裏是我的jsfiddle:http://jsfiddle.net/EGVQH/
組織編寫了時間
我找到了正確的答案錯誤,但它是小的。如果我有這樣的代碼:
<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/
它必須是遞歸的? – Aprillion
我認爲應該是。因爲嵌套層次可能高達10-20個元素,所以20+「for」圓圈不好:) – Feanor
如果一個元素沒有innerText,它的子元素都沒有,所以在測試圖像之後,頂層父元素可以是沒有檢查孩子安全地移除..或我在這裏失蹤? – Aprillion