2010-10-07 76 views
5

我知道这应该是简单的,但无法弄清楚。这是代码。删除或隐藏一个div如果它是空的

<div class="cols lmenu_item1" id="leftMenuWrapper"> 
<div id="leftmenu"></div> 
</div> 

我只需要去掉 “leftMenuWrapper” 如果 “leftmenu” 是空的。这是我一直在使用的。

$('#leftmenu').empty().remove('#leftMenuWrapper'); 

对不起,如果这是一个简单的问题。有个星期一!

谢谢!

+0

看这个问题http://stackoverflow.com/questions/5327751/hide-divs-if-they-are-empty – 2012-07-25 11:11:34

回答

23

你可以这样说:

$('#leftmenu:empty').parent().remove(); 

此只选择#leftmenu如果:empty,然后只抓住的.parent().remove()。如果它不是空的,那么第一个选择器不会找到任何东西,或者任何父母都可以删除。

+3

谁说脚本不够优雅? – 2010-10-07 21:36:47

+1

+1显示''empty'选择器。 – 2010-10-08 02:31:16

+0

@Peter - 我认为在':animated'和':header'旁边是真正方便的伪选择器中使用最少的,给他们一些爱! – 2010-10-08 02:40:53

1
if(!$('#leftmenu').html()){ $('#leftmenu').parent().remove(); } 
+1

这似乎有效,但效率不高,因为您必须选择元素两次。当然,这似乎是一个有效的解决方案。 – user113716 2010-10-07 21:44:46

+0

@patrick - 我想你可以做'var $ elie = $('#leftmenu'); if(!$ elie.html()){$ elie.parent()。remove(); }' – 2010-10-08 02:33:58

+0

@Peter - 非常真实。缓存选择器的结果会好得多。事实上,对于ID不止一次被选中的元素,我可能会缓存它。 – user113716 2010-10-08 12:19:50

5

如果你想删除它是否看起来空:

if ($.trim($('#leftmenu').text()) == "") 
    $('#leftMenuWrapper').remove(); 

jsFiddle example

以上只需的#leftmenu文本内容和检查,如果之前剪掉的空白什么都有。

以上的超过$(#leftmenu:empty)的一大优势是,上述在下列情况下删除其中:empty不会:

    // The above code works in these cases where ":empty" does not: 

<div id="leftmenu">  </div>        // <== white space 
<div id="leftmenu"><p></p></div>       // <== empty elements 

.trim()
.text()
.remove()


注意,以下是更有效(但不太可读IMO):

var $elie = ('#leftmenu'); 
if ($.trim($elie.text()) == "") 
    $elie.parent().remove(); 
+2

+1 - 我敢打赌,当':empty'因为有空格或换行符而不工作时,很多人会被卡住。 – user113716 2010-10-08 12:25:35

+0

我在这里错过了什么吗?看看你的jsFiddle页面和#leftMenuWrapper包含文本“你会看到这个,如果它没有被删除。”已被删除。但从我可以告诉,你的脚本应该只删除#leftMenuWrapper,如果里面没有文字... ??? – Luke 2016-02-15 03:15:35