Bir div'in boş olup olmadığını kontrol etmek için bir if ifadesi kullanma


114

Ayrı bir div boşsa belirli bir div'i kaldırmaya çalışıyorum. İşte kullandığım şey:

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

Bunun yakın olduğunu düşünüyorum ama # sol menünün boş olduğunu test etmek için kodun nasıl yazılacağını çözemiyorum. Herhangi bir yardım takdir edilmektedir!

Yanıtlar:


271

Kullanabilirsiniz .is().

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

Ya da lengthbulunup bulunmadığını görmek için mülkü test edebilirsiniz .

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

Akılda o bulundurun boş hayır demektir boşluk ya. Beyaz boşluk olma ihtimali varsa $.trim(), içeriğin uzunluğunu kullanabilir ve kontrol edebilirsiniz .

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

3
trim()benim için mükemmel çalışıyor. Sharepoint'te bir miktar beyaz boşluk ekleyen ve trim()bulduğu bir sütunu kaldırmak zorunda kaldım . Teşekkürler.
motoxer4533

1
Aşağıda olduğu gibi, içerik olarak rastgele görünmez HTML'yi saymak istemiyorsanız .text () kullanabileceğinizi unutmayın.
rogueleaderr

@rogueleaderr Smart, kullanmayı düşünmedim .text()çünkü "boş" konteynırda gerçekten bazı yorumlarınız olabilir ve bu nedenle ne işe yarayacak ne trimde :emptyişe yarayacak. Thx
Juri

.html()Bir kap çok uzun bir HTML içeriğine sahipse , bu kullanmak için etkili bir çözüm olur mu?
techie_28

37

Boş derken ne demek istediğine bağlı.

Metin olup olmadığını kontrol etmek için (bu, kendileri boş olan alt öğelere izin verir):

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

Alt öğe veya metin olup olmadığını kontrol etmek için:

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

Veya,

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

22

Boş div'leri nasıl kontrol edeceğiniz konusunda hızlı bir demo istiyorsanız, şu bağlantıyı denemenizi öneririm:

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


Aşağıda bazı kısa örnekler var:

CSS kullanma

Div'iniz boşsa, beyaz boşluk olmasa bile, CSS'yi kullanabilirsiniz:

.someDiv:empty {
    display: none;
}

Maalesef önceki kardeş öğeyi seçen bir CSS seçici yok. Yalnızca sonraki kardeş öğe için vardır:x ~ y

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

JQuery kullanma

Text () işlevi ile öğenin metin uzunluğunu kontrol etme

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

Öğenin içinde alt etiket olup olmadığını kontrol edin

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

Beyaz boşlukları olup olmadığını kontrol edin

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

12

JQuery işlevini şu şekilde genişletebilirsiniz :

Uzatın:

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

Kullanım:

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

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

3

Bunu dene:

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

En güzeli değil ama işe yaramalı. İç HTML'nin (# sol menünün içeriği) boş bir dize olup olmadığını kontrol eder (yani içinde hiçbir şey yoktur).


2

Benim durumumda, belgede saklanacak birden çok öğem vardı. Hazır. Şimdiye kadar benim için çalışan işlev (filtre):

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

veya .hide () yerine .remove (), ne tercih ederseniz edin.

Bilginize: Bu, özellikle, SharePoint'teki can sıkıcı boş tablo hücrelerini gizlemek için kullandığım çözümdür (bu koşulla birlikte "|| $ (this) .children (" menu "). Length".


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

1

Bugün bununla karşılaştım ve kabul edilen cevaplar benim için işe yaramadı. İşte böyle yaptım.

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

Çözümüm, div içinde herhangi bir öğe olup olmadığını kontrol eder, böylece içinde yalnızca metin varsa div'i boş olarak işaretler.


1

ayrıca bunu kullanabilirsiniz:


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

Senin için çalışacağını düşünüyorum!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.