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