2010-10-07 4 views
5

Je sais que cela devrait être simple, mais ne peut pas comprendre. Voici le code. Je dois simplement supprimer le "leftMenuWrapper" si "leftmenu" est vide. Voici ce que j'ai utilisé.Supprimer ou masquer une div si elle est vide

$('#leftmenu').empty().remove('#leftMenuWrapper'); 

Désolé, la question est simple. Avoir un lundi!

Merci!

+0

Regardez cette question http://stackoverflow.com/questions/5327751/hide-divs-if-they-are-empty –

Répondre

23

Vous pouvez le faire comme ceci:

$('#leftmenu:empty').parent().remove(); 

Ce ne sélectionne que #leftmenusi il est :empty, puis attrape seulement le .parent() de que à .remove(). Si ce n'était pas vide, alors le premier sélecteur ne trouvera rien, ou n'importe quel parent à supprimer.

+3

Qui a dit que les scripts n'étaient pas élégants? –

+1

+1 pour me montrer le sélecteur ': empty'. –

+0

@Peter - Je pense que, à côté de ': animated' et': header', c'est le pseudo-sélecteur le plus sous-utilisé, donnez-leur de l'amour! –

1
if(!$('#leftmenu').html()){ $('#leftmenu').parent().remove(); } 
+1

Cela semble fonctionner, mais ce n'est pas aussi efficace parce que vous devez sélectionner l'élément deux fois. Cela semble certainement une solution valable, cependant. – user113716

+0

@patrick - Je suppose que vous pourriez faire 'var $ elie = $ ('# leftmenu'); if (! $ elie.html()) {$ elie.parent(). remove(); } ' –

+0

@Peter - Très vrai. Serait beaucoup mieux de mettre en cache le résultat du sélecteur. En fait, pour un élément avec un ID qui est sélectionné plus d'une fois n'importe où, je le cache probablement. – user113716

5

Si vous voulez supprimer si elle semble vide:

if ($.trim($('#leftmenu').text()) == "") 
    $('#leftMenuWrapper').remove(); 

jsFiddle example

Les prises ci-dessus seulement le contenu du texte de #leftmenu et les garnitures de l'espace avant de vérifier si Tout est là.

Le grand avantage de ce qui précède sur $(#leftmenu:empty) est que le retire ci-dessus dans les cas suivants où :empty ne serait pas:

    // The above code works in these cases where ":empty" does not: 

<div id="leftmenu">  </div>        // <== white space 
<div id="leftmenu"><p></p></div>       // <== empty elements 

.trim()
.text()
.remove()


Notez que ce qui suit est plus efficace (mais moins lisible imo):

var $elie = ('#leftmenu'); 
if ($.trim($elie.text()) == "") 
    $elie.parent().remove(); 
+2

+1 - Je parie que beaucoup de gens sont bloqués quand ': empty' ne fonctionne pas parce qu'il y a un espace ou un saut de ligne. – user113716

+0

Ai-je oublié quelque chose ici?En regardant votre page jsFiddle et le #leftMenuWrapper contenant le texte "Vous verrez ceci, s'il n'a pas été supprimé." a été retiré. Mais d'après ce que je peux dire, votre script est censé supprimer seulement le #leftMenuWrapper s'il n'y a pas de texte à l'intérieur ... ??? – Luke

Questions connexes