使用if语句检查div是否为空


114

如果单独的div为空,我正在尝试删除特定的div。这是我正在使用的:

$(document).ready(function () {
    if ('#leftmenu:empty') {
        $('#menuTitleWrapper').remove();
        $('#middlemenu').css({ 'right': '0', 'position': 'absolute' });
        $('#PageContent').css({ 'top': '30px', 'position': 'relative' });
    }
});

我认为这很接近,但是我不知道如何编写代码来测试#leftmenu是否为空。任何帮助表示赞赏!

Answers:


271

您可以使用.is()

if( $('#leftmenu').is(':empty') ) {
    // ...

或者,您可以仅测试该length属性以查看是否找到了该属性。

if( $('#leftmenu:empty').length ) {
    // ...

请记住,意味着也没有空格。如果有可能会有空白,那么您可以使用$.trim()并检查内容的长度。

if( !$.trim( $('#leftmenu').html() ).length ) {
    // ...

3
trim()对我来说很完美。必须删除在Sharepoint中添加一些空白的列,在其中trim()查找。谢谢。
motoxer4533 2012年

1
如下所示,请注意,如果您不想将随机的不可见HTML视为内容,则可以使用.text()。
rogueleaderr

@rogueleaderr Smart,没有考虑使用它,.text()因为您实际上可以在“空”容器中添加一些注释,因此trim:empty不起作用。Thx
Juri

.html()如果容器的HTML内容很长,那将是一种有效的解决方案吗?
techie_28 '16

37

这取决于您的意思是空的。

要检查是否没有文本(这允许子元素本身为空):

if ($('#leftmenu').text() == '')

要检查是否没有子元素或文本:

if ($('#leftmenu').contents().length == 0)

要么,

if ($('#leftmenu').html() == '')

22

如果要快速演示如何检查是否有空div,建议您尝试以下链接:

http://html-tuts.com/check-if-html-element-is-empty-or-has-children-tags/


下面有一些简短的示例:

使用CSS

如果您的div是空的,甚至没有空格,则可以使用CSS:

.someDiv:empty {
    display: none;
}

不幸的是,没有CSS选择器选择前一个兄弟元素。只有下一个同级元素:x ~ y

.someDiv:empty ~ .anotherDiv {
    display: none;
}

使用jQuery

使用text()函数检查元素的文本长度

if ( $('#leftmenu').text().length == 0 ) {
    // length of text is 0
}

检查元素内部是否有任何子标签

if ( $('#leftmenu').children().length == 0 ) {
    // div has no other tags inside it
}

检查是否有空白元素

if ( $.trim( $('.someDiv').text() ).length == 0 ) {
    // white-space trimmed, div is empty
}

12

您可以 像这样扩展jQuery功能:

扩展:

(function($){
    jQuery.fn.checkEmpty = function() {
       return !$.trim(this.html()).length;
    };
}(jQuery));

用 :

<div id="selector"></div>

if($("#selector").checkEmpty()){
     console.log("Empty");
}else{
     console.log("Not Empty");
}

3

试试这个:

$(document).ready(function() {
    if ($('#leftmenu').html() === "") {
        $('#menuTitleWrapper').remove();
        $('#middlemenu').css({'right' : '0', 'position' : 'absolute'});
        $('#PageContent').css({'top' : '30px', 'position' : 'relative'});
    }
});

它不是最漂亮的,但应该可以。它检查innerHTML(#leftmenu的内容)是否为空字符串(即其中没有任何内容)。


2

就我而言,我有多个要隐藏在document.ready上的元素。到目前为止,这是对我有用的函数(过滤器):

$('[name="_invisibleIfEmpty"]').filter(function () {
    return $.trim($(this).html()).length == 0;
}).hide();

或.remove()而不是.hide(),无论您喜欢什么。

仅供参考:特别是这是我用来隐藏SharePoint中烦人的空表单元格的解决方案(除了此条件“ || $(this).children(“ menu”)。length”。


1
if (typeof($('#container .prateleira')[0]) === 'undefined') {
    $('#ctl00_Conteudo_ctrPaginaSistemaAreaWrapper').css('display','none');
}

1

我今天遇到了这个问题,被接受的答案对我不起作用。这是我的方法。

if( $('#div-id *').length === 0 ) {
    // your code here...
}

我的解决方案检查div中是否有任何元素,因此如果其中仅包含文本,它仍会将div标记为空。


1

您也可以使用此:


    if (! $('#leftmenu').children().length > 0 ) {
         // do something : e.x : remove a specific div
    }

我认为它将为您工作!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.