我有一个嵌套的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