Использование оператора if для проверки того, является ли div пустым

Я пытаюсь удалить определенный div, если отдельный div пуст. Вот что я использую:

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

Я думаю, что это близко, но я не могу понять, как написать код для проверки #leftmenu пуст. Любая помощь приветствуется!

Ответ 1

Вы можете использовать .is().

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

Или вы можете просто проверить свойство length, чтобы узнать, найден ли его.

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

Помните, что пустое означает также пустое пространство. Если есть вероятность, что будет свободное пространство, вы можете использовать $.trim() и проверить длину содержимого.

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

Ответ 2

Это зависит от того, что вы подразумеваете под пустым.

Чтобы проверить, нет ли текста (это позволяет сами дочерние элементы):

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

Чтобы проверить, нет ли дочерних элементов или текста:

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

Или

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

Ответ 3

Если вам нужна быстрая демонстрация того, как вы проверяете наличие пустых divs, я предлагаю вам попробовать эту ссылку:

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


Ниже приведены короткие примеры:

Использование CSS

Если ваш div пуст без каких-либо белых пробелов, вы можете использовать CSS:

.someDiv:empty {
    display: none;
}

К сожалению, нет селектора CSS, который выбирает предыдущий элемент сиблинга. Существует только для следующего элемента sibling: 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
}

Ответ 4

Вы можете расширить 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");
}

Ответ 5

Попробуйте следующее:

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

Это не самый красивый, но он должен работать. Он проверяет, является ли innerHTML (содержимое #leftmenu) пустой строкой (т.е. Внутри ничего нет).

Ответ 6

В моем случае у меня было несколько элементов, чтобы спрятаться на document.ready. Это функция (фильтр), которая работала для меня до сих пор:

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

или .remove(), а не .hide(), что бы вы ни выбрали.

FYI: Это, в частности, решение, которое я использую, чтобы скрыть раздражающие пустые ячейки таблицы в SharePoint (в дополнение к этому условию "|| $(this).children(" menu "). Length".

Ответ 7

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

Ответ 8

if($('#leftmenu').val() == "") {
   // statement
}