jQuery递归删除空子

Fea*_*nor 8 javascript recursion jquery

我有一组嵌套的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>?
Run Code Online (Sandbox Code Playgroud)

所以我想要留下图像和文字的跨度,其他人离开.

我的功能之后我需要那个结果:

<div id="mydiv">

<span> <img src="someimg.jpg" width="100" height="100" /> </span>
<span>some text</span>
</div>?
Run Code Online (Sandbox Code Playgroud)

我想,这是通过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();
Run Code Online (Sandbox Code Playgroud)

这段代码被破坏了,它删除并留下空的空间......我如何通过递归获得我的结果?

EDITED

这是我的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>?
Run Code Online (Sandbox Code Playgroud)

我认为它会导致:

<div id="mydiv">
<span> Some text</span>
<span> <img src="someimg.jpg" width="100" height="100" /> </span>
<span>some text</span>
</div>?
Run Code Online (Sandbox Code Playgroud)

以前的"正确"回答我的问题是错误的结果<span> <br> Some text</span>.测试后,其他答案都是错误的.

看我的JSfiddle:http://jsfiddle.net/EGVQH/2/

Esa*_*ija 4

function rem(root) {\n    var $root = $(root);\n    $root.contents().each(function() {\n        if (this.nodeType === 1) {\n            rem(this);\n        }\n    });\n\n    if (!$root.is("area,base,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr") && !$root.html().trim().length) {\n        $root.remove();\n    }\n}\n\n\nrem("#mydiv");\xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用于:

\n\n
<div id="mydiv">\n<span> <br> Some text</span>\n<span>   <span><br> <span></span> </span>  </span>\n\n<span> <img src="someimg.jpg" width="100" height="100"> </span>\n<span>some text</span>\n\n</div>\xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n\n

树叶:

\n\n
<div id="mydiv">\n<span>  Some text</span>\n\n\n<span> <img src="someimg.jpg" width="100" height="100"> </span>\n<span>some text</span>\n\n</div>\n
Run Code Online (Sandbox Code Playgroud)\n\n

http://jsfiddle.net/LEKaL/1/

\n