366 votes

Comment vérifier si un élément HTML est vide en utilisant jQuery ?

J'essaie d'appeler une fonction uniquement si un élément HTML est vide, en utilisant jQuery.

Quelque chose comme ça :

if (isEmpty($('#element'))) {
    // do something
}

0 votes

$('#elem').text().match(/\S/) || alert('empty');

617voto

Emil Points 3032
if ($('#element').is(':empty')){
  //do something
}

Pour plus d'informations, voir http://api.jquery.com/is/ et http://api.jquery.com/empty-selector/

EDIT :

Comme certains l'ont souligné, l'interprétation d'un élément vide par le navigateur peut varier. Si vous souhaitez ignorer les éléments invisibles tels que les espaces et les sauts de ligne et rendre l'implémentation plus cohérente, vous pouvez créer une fonction (ou simplement utiliser le code qu'elle contient).

  function isEmpty( el ){
      return !$.trim(el.html())
  }
  if (isEmpty($('#element'))) {
      // do something
  }

Vous pouvez également en faire un plugin jQuery, mais vous avez compris l'idée.

58 votes

Les sauts de ligne sont considérés comme du contenu aux éléments dans FF et Chrome.

0 votes

@Corneliu a raison. J'ai posté une réponse ci-dessous qui prend cela en considération. C'était une source majeure de frustration pour moi sur un projet récent.

2 votes

C'est génial :-D

121voto

Serge Shultz Points 901

J'ai trouvé que c'était le seul moyen fiable (puisque Chrome et FF considèrent les espaces et les sauts de ligne comme des éléments) :

if($.trim($("selector").html())=='')

24 votes

Une version légèrement plus comprimée peut tirer parti de la fragilité de la chaîne vide : if(!$.trim($("selector").html())

11 votes

Je ne pense pas qu'ils les considèrent comme des "éléments", mais comme des nœuds, ce qui est correct selon l'OMI. Vous pourriez également faire if($("selector").children().length === 0) ou if($("selector > *").length === 0) .

1 votes

Je pense que vous confondez "éléments" et "nœuds".

74voto

DMTintner Points 2396

Les espaces blancs et les sauts de ligne sont les principaux problèmes liés à l'utilisation du sélecteur :empty. Attention, en CSS, la pseudo-classe :empty se comporte de la même manière. J'aime cette méthode :

if ($someElement.children().length == 0){
     someAction();
}

4 votes

J'ai choisi cette option parce que j'avais des commentaires HTML dans mon DIV.

2 votes

De loin la solution la plus élégante, devrait être la réponse correcte.

8 votes

Notez que $.children() ne renvoie pas les noeuds de texte ou de commentaire, ce qui signifie que cette solution ne vérifie que si l'élément est vide de éléments . Si un élément qui ne contient que du texte ou des commentaires devrait pas est considéré comme vide pour vos besoins, alors vous devriez utiliser l'une des autres solutions.

29voto

torazaburo Points 6335
!elt.hasChildNodes()

Oui, je sais, ce n'est pas jQuery, donc vous pouvez utiliser ceci :

!$(elt)[0].hasChildNodes()

Heureux maintenant ?

1 votes

+1 J'ai utilisé votre approche dans un fichier jQuery filter car je ne voulais pas utiliser jQuery dans la fonction, sauf si cela était nécessaire.

1 votes

Si je considère que les espaces blancs sont vides <div class="results"> </div> cette déclaration retournera faux. jsfiddle.net/ytliuSVN/0pdwLt46

19voto

AlienWebguy Points 42370
jQuery.fn.doSomething = function() {
   //return something with 'this'
};

$('selector:empty').doSomething();

0 votes

Super ! J'aime les constructions sans "si".

0 votes

Tout à fait d'accord avec @Nikolay, ce n'est pas utile pour ma situation spécifique mais je m'en souviendrai pour l'avenir !

0 votes

Cela ne fonctionnerait pas si vous deviez appliquer "ceci".

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