177 votes

Comment vérifier les objets nuls dans jQuery

J'utilise jQuery et je veux vérifier l'existence d'un élément dans ma page. J'ai écrit le code suivant, mais cela ne fonctionne pas :

if($("#btext" + i) != null) {
    //alert($("#btext" + i).text());
    $("#btext" + i).text("Branch " + i);
}

Comment vérifier l'existence de l'élément ?

258voto

Christoph Points 64389

Vérifiez le FAQ sur jQuery ...

Vous pouvez utiliser la propriété length de la collection jQuery retournée par votre sélecteur :

if ( $('#myDiv').length ){}

0 votes

Que pensez-vous de var _myDiv = $('#myDiv') ; ... .... if(_myDiv.lenght) {...} produire une exception.

1 votes

Comme le dit eleotlecram ; mieux vaut éviter .length

6 votes

@AurelianoBuendia, vous avez utilisé lenght au lieu de length ; c'est une faute d'orthographe.

64voto

eleotlecram Points 484

(Puisque je ne semble pas avoir assez de réputation pour voter contre la réponse...)

Wolf écrit :

L'appel de la propriété length sur un objet indéfini ou un objet nul provoquera l'échec des navigateurs IE et webkit à échouer !

Essayez plutôt ceci :

 // NOTE!! THE FOLLOWING IS WRONG; DO NOT USE!  -- EleotleCram
if($("#something") !== null){
  // do something
}

o

 // NOTE!! THE FOLLOWING IS WRONG; DO NOT USE!  -- EleotleCram
if($("#something") === null){
  // don't do something
}

S'il est vrai que l'appel de la propriété length sur un objet non défini ou nul fera échouer les navigateurs, le résultat des sélecteurs de jQuery (le $('...')) sera jamais être nulle ou indéfinie. Les suggestions de code n'ont donc aucun sens. Utilisez une des autres réponses, elles ont plus de sens.


(Mise à jour 2012) Parce que les gens regardent le code et cette réponse est assez haut dans la liste : Depuis quelques années, j'utilise ce petit plugin :

  jQuery.fn['any'] = function() {
     return (this.length > 0);
  };

Je pense $('div').any() se lit mieux que $('div').length De plus, vous ne souffrirez pas autant des fautes de frappe : $('div').ayn() donnera lieu à une erreur d'exécution, $('div').lenght sera silencieusement et très probablement toujours faussé.

__
Edités en novembre 2012 :

1) Comme les gens ont tendance à regarder le code et à ne pas lire ce qui est dit autour du code, j'ai ajouté deux grandes notes de type "caveat lector" au code cité de Wolf.
2) J'ai ajouté le code du petit plugin que j'utilise pour cette situation.

2 votes

@VovaPopov : Je vous suggère la prochaine fois de prendre un peu plus de temps pour lire la réponse. Je ne faisais que constater que l'exemple de code "by Wolf" était incorrect. Je n'ai jamais fourni de réponse, je me suis contenté de renvoyer à d'autres réponses qui ont plus de sens.

0 votes

Bonne réponse. Je suis désolé que les gens l'interprètent mal.

16voto

tvanfosson Points 268301

La fonction lookup renvoie un tableau d'éléments correspondants. Vous pourriez vérifier si la longueur est égale à zéro. Notez le changement pour ne rechercher les éléments qu'une seule fois et réutiliser les résultats si nécessaire.

var elem = $("#btext" + i);
if (elem.length != 0) {
   elem.text("Branch " + i);
}

Par ailleurs, avez-vous essayé d'utiliser simplement la fonction texte ? Si aucun élément n'existe, elle ne fera rien.

$("#btext" + i).text("Branch " + i);

7 votes

0 est une valeur fausse, donc l'expression elem.length est évaluée à false - en d'autres termes, il n'y a pas besoin de la partie '!= 0'.

2 votes

@999, je pense que la vérification contre zéro rend le code plus lisible, bien que les deux façons soient probablement lisibles pour quelqu'un qui est habitué aux langages de script.

12voto

waney Points 111

La fonction jquery $() renvoie toujours des valeurs non nulles - c'est-à-dire des éléments qui correspondent à votre sélecteur cretaria. Si l'élément n'a pas été trouvé, elle renvoie un tableau vide. Donc votre code ressemblera à quelque chose comme ceci -

if ($("#btext" + i).length){
        //alert($("#btext" + i).text());
    $("#btext" + i).text("Branch " + i);
}

1 votes

Je ne pense pas qu'il soit vrai que le $() renvoie un tableau. Les objets jQuery ont des comportements qui sont similaires aux tableaux, mais je ne pense pas qu'ils soient réellement des tableaux, et je pense que vous trouverez que leur comportement n'est pas toujours le même que celui des tableaux. Voir cette démonstration rapide .

4voto

burntblark Points 111

Peu importe ce que vous sélectionnez, c'est la fonction $() renvoie toujours un objet jQuery, qui ne peut donc pas être utilisé pour les tests. La meilleure solution (si ce n'est la seule) est d'utiliser la fonction size() ou la propriété de longueur native comme expliqué ci-dessus.

if ( $('selector').size() ) {...}

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