web-dev-qa-db-fra.com

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?

164
Prashant

Vérifiez le FAQ jQuery ...

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

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

(Comme je ne semble pas avoir assez de réputation pour rejeter la réponse ...)

Wolf a écrit:

L'appel de la propriété length sur un objet non défini ou null entraîne l'échec de IE et des navigateurs webkit!

Au lieu d'essayer ceci:

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

ou

 // 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 entraînera un échec des navigateurs, le résultat des sélecteurs de jQuery (le $ ('...')) sera jamais être nul ou indéfini. Les suggestions de code n'ont donc aucun sens. Utilisez l’une des autres réponses, elles ont plus de sens.


(Mise à jour 2012) Parce que les gens regardent le code et que cette réponse est assez en haut de la liste: Ces dernières années, j'utilise ce petit plugin:

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

Je pense que $ ('div'). Any () se lit mieux que $ ('div'). Length, plus vous ne souffrirez pas autant de fautes de frappe: - $ ('div'). ayn () donnera une erreur d’exécution, $ ('div'). longueur sera probablement toujours faussement en silence.

__
Édits novembre 2012:

1) Parce que les gens ont tendance à regarder le code et à ne pas lire ce qui est dit autour du code, j'ai ajouté deux grosses notes de mise en garde au code cité par Wolf.
2) J'ai ajouté le code du petit plugin que j'utilise pour cette situation.

59
eleotlecram

La fonction de recherche renvoie un tableau d'éléments correspondants. Vous pouvez vérifier si la longueur est 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);
}

En outre, avez-vous essayé d'utiliser simplement la fonction de texte - si aucun élément n'existe, cela ne fera rien.

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

la fonction jQuery $ () renvoie toujours une valeur non nulle - les éléments moyens correspondants correspondent à votre sélecteur crétier. Si l'élément n'a pas été trouvé, il retournera un tableau vide. Donc, votre code ressemblera à quelque chose comme ça -

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

Dans jQuery 1.4, vous obtenez la fonction $ .isEmptyObject, mais si vous êtes obligé d'utiliser une ancienne version de jQ comme nous, pauvres Drupal, les développeurs volent simplement utiliser ce code:

// This is a function similar to the jQuery 1.4 $.isEmptyObject.
function isObjectEmpty(obj) {
  for ( var name in obj ) {
    return false;
  }
  return true;
}

Utilisez-le comme:

console.log(isObjectEmpty(the_object)); // Returns true or false.
5
theamoeba

quelle que soit votre sélection, la fonction $() renvoie toujours un objet jQuery afin qu'il ne puisse pas être utilisé pour le test. Le meilleur moyen pour le moment (sinon le seul) consiste à utiliser la fonction size() ou la propriété de longueur native, comme expliqué ci-dessus.

if ( $('selector').size() ) {...}                   
5
burntblark
if ( $('#whatever')[0] ) {...}

L'objet jQuery qui est renvoyé par toutes les méthodes natives de jQuery n'est PAS un tableau, c'est un objet avec de nombreuses propriétés. l'un d'entre eux étant une propriété "length". Vous pouvez également vérifier la taille () ou obtenir (0) ou obtenir () - "get (0)" fonctionne de la même manière que pour accéder au premier élément, c'est-à-dire $ (elem) [0]

3
James

Qu'en est-il d'utiliser "undefined"?

if (value != undefined){ // do stuff } 
3
Hugh Seagraves

utilisez $("#selector").get(0) pour vérifier avec null comme ça. get renvoie l'élément dom, jusqu'à ce que vous ayez affaire à un tableau où vous devez vérifier la propriété length. Personnellement, je n'aime pas la vérification de la longueur pour la gestion des null, cela me confond pour une raison quelconque :)

1
Emre

En utilisant la propriété length, vous pouvez le faire.

jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) { 
   //do somthing
}
1
Suresh Pattu

quand l'objet est vide, retournez cette erreur:
ncaught TypeError: Impossible de lire la propriété '0' de null
J'essaie ce code
try{ if ($("#btext" + i).length) {};
} catch(err){ if ($("#btext" + i).length) { //working this code if item not NULL }; }

0
ahmadjn