Використання оператора 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 порожній. Будь-яка допомога вдячна!

Відповіді:


271

Можна використовувати .is().

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

Або ви можете просто протестувати lengthмайно, щоб побачити, чи знайдено його.

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

Майте на увазі, що порожній означає і відсутність білого простору. Якщо є ймовірність, що буде пробіл, то ви можете використовувати $.trim()та перевірити довжину вмісту.

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

3
trim()працює ідеально для мене. Довелося видалити стовпчик у Sharepoint, який додав пробіл, у якому trim()знаходять. Дякую.
motoxer4533

1
Як зазначено нижче, зауважте, що ви можете використовувати .text (), якщо ви не хочете рахувати випадковий невидимий HTML як вміст.
rogueleaderr

@rogueleaderr Smart, не думав про використання, .text()тому що ви насправді можете мати коментар у "порожньому" контейнері, і, таким чином, ні, trimні :emptyпрацювати не буде. Thx
Юрі

Це було б ефективним рішенням для використання, .html()якщо контейнер має дуже довгий вміст HTML?
techie_28

37

Це залежить від того, що ви маєте на увазі під порожнім.

Щоб перевірити, чи немає тексту (це дозволяє дочірнім елементам, які самі порожні):

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

Щоб перевірити, чи немає дочірніх елементів або тексту:

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

Або,

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

22

Якщо ви хочете отримати швидку демонстрацію того, як ви перевіряєте порожні діви, я б запропонував вам спробувати це посилання:

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'});
    }
});

Це не найкрасивіше, але це має працювати. Він перевіряє, чи внутрішнійHTML (вміст #leftmenu) є порожнім рядком (тобто всередині нього немає нічого).


2

У моєму випадку у мене було декілька елементів, які можна приховати на document.ready. Це функція (фільтр), яка працювала для мене досі:

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

або .remove (), а не .hide (), що завгодно.

FYI: Це, зокрема, рішення, яке я використовую, щоб приховати дратує порожні клітинки таблиці в 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
    }

Я думаю, це спрацює для тебе!


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.