118 votes

Utilisation d'une instruction if pour vérifier si un div est vide

J'essaie de supprimer une div spécifique si une div séparée est vide. Voici ce que j'utilise :

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

Je pense que c'est proche mais je n'arrive pas à trouver comment écrire le code pour tester si #leftmenu est vide. Toute aide est appréciée !

284voto

user113716 Points 143363

Vous pouvez utiliser .is() .

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

Ou vous pouvez simplement tester le length pour voir s'il en existe un.

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

Gardez à l'esprit que vide signifie pas d'espace blanc non plus. S'il y a une chance qu'il y ait de l'espace blanc, alors vous pouvez utiliser $.trim() et vérifier la longueur du contenu.

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

3 votes

trim() fonctionne parfaitement pour moi. J'ai dû supprimer une colonne dans Sharepoint qui ajoutait de l'espace blanc, dans lequel trim() trouve. Merci.

1 votes

Comme ci-dessous, notez que vous pouvez utiliser .text() si vous ne voulez pas compter le HTML invisible aléatoire comme contenu.

0 votes

@rogueleaderr Intelligent, je n'ai pas pensé à utiliser .text() parce que vous pourriez avoir un commentaire dans le conteneur "vide" et donc ni l'un ni l'autre. trim ni :empty fonctionnerait. Thx

38voto

Box9 Points 41987

Cela dépend de ce que vous entendez par "vide".

Pour vérifier s'il n'y a pas de texte (cela permet aux éléments enfants qui sont eux-mêmes vides) :

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

Pour vérifier s'il n'y a pas d'éléments enfants ou de texte :

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

Ou,

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

3voto

Reid Points 4229

Essayez ça :

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

Ce n'est pas le plus joli, mais ça devrait fonctionner. Elle vérifie si le innerHTML (le contenu de #leftmenu) est une chaîne vide (c'est-à-dire qu'il n'y a rien à l'intérieur).

2voto

Dans mon cas, j'avais plusieurs éléments à masquer sur document.ready. Voici la fonction (filtre) qui a fonctionné pour moi jusqu'à présent :

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

ou .remove() plutôt que .hide(), selon votre préférence.

POUR INFO : C'est notamment la solution que j'utilise pour masquer les cellules de tableau vides gênantes dans SharePoint (en plus avec cette condition "|| $(this).children("menu").length".

1voto

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X