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?
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 ){}
(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.
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);
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);
}
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.
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() ) {...}
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]
Qu'en est-il d'utiliser "undefined"?
if (value != undefined){ // do stuff }
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 :)
En utilisant la propriété length, vous pouvez le faire.
jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) {
//do somthing
}
quand l'objet est vide, retournez cette erreur:
ncaught TypeError: Impossible de lire la propriété '0' de null
J'essaie ce codetry{ if ($("#btext" + i).length) {};
} catch(err){ if ($("#btext" + i).length) { //working this code if item not NULL }; }