Comment puis-je vérifier l'existence d'un élément dans jQuery?
Le code actuel que j'ai est le suivant:
if ($(selector).length > 0) {
// Do something
}
Existe-t-il une manière plus élégante d'aborder cela? Peut-être un plugin ou une fonction?
javascript
jquery
Jake McGraw
la source
la source
NaN != false
.[] + []
=""
... ahh j'aime javascript[].toString() === [].join(',') === ""
et"" === ""
.typeof NaN == 'number'
Oui!
Ceci est en réponse à: Podcast Herding Code avec Jeff Atwood
la source
$.fn.exists
exemple remplace une recherche de propriété (bon marché!) Par deux appels de fonction, qui sont beaucoup plus chers - et l'un de ces appels de fonction recrée un objet jQuery que vous avez déjà, ce qui est tout simplement stupide..exists
lit proprement, alors qu'il se.length
lit comme quelque chose de sémantiquement différent, même si la sémantique coïncide avec un résultat identique.Si vous avez utilisé
cela impliquerait que le chaînage était possible alors qu'il ne l'est pas.
Ce serait mieux:
Alternativement, à partir de la FAQ :
Vous pouvez également utiliser ce qui suit. S'il n'y a pas de valeurs dans le tableau d'objets jQuery, obtenir le premier élément du tableau renverrait undefined.
la source
$(".missing").css("color", "red")
fait déjà la bonne chose… (c.-à-d. rien)$.fn
méthodes jQuery qui retournent autre chose qu'un nouvel objet jQuery et donc ne chaînent pas.Vous pouvez utiliser ceci:
la source
La façon la plus rapide et la plus sémantiquement explicite de vérifier l'existence est en fait d'utiliser plain
JavaScript
:Il est un peu plus long à écrire que l'alternative de longueur jQuery, mais s'exécute plus rapidement car il s'agit d'une méthode JS native.
Et c'est mieux que l'alternative d'écrire votre propre
jQuery
fonction. Cette alternative est plus lente, pour les raisons indiquées par @snover. Mais cela donnerait également à d'autres programmeurs l'impression que laexists()
fonction est quelque chose d'inhérent à jQuery.JavaScript
serait / devrait être compris par d'autres éditant votre code, sans augmentation de la dette de connaissances.NB: Notez l'absence d'un '#' avant le
element_id
(puisque c'est du JS simple, pasjQuery
).la source
$('#foo a.special')
. Et il peut renvoyer plus d'un élément.getElementById
ne peut pas commencer à approcher cela.if(document.querySelector("#foo a.special"))
fonctionnerait. Aucun jQuery nécessaire.Vous pouvez économiser quelques octets en écrivant:
Cela fonctionne car chaque objet jQuery se fait également passer pour un tableau, nous pouvons donc utiliser l'opérateur de déréférencement de tableau pour obtenir le premier élément du tableau . Il renvoie
undefined
s'il n'y a aucun élément à l'index spécifié.la source
jQuery.first()
ou lesjQuery.eq(0)
deux retournent des objets, les objets sont véridiques même s'ils sont vides. Cet exemple devrait illustrer pourquoi ces fonctions ne peuvent pas être utilisées tellesif(jQuery("#does-not-exist").eq(0)) alert("#does-not-exist exists")
.eq(0)
renvoie juste un autre objet jQuery tronqué à la longueur 1 ou 0..first()
est juste une méthode pratique pour.eq(0)
. Mais.get(0)
renvoie le premier élément DOM ouundefined
et est identique à[0]
. Le premier élément DOM d'un objet jQuery est stocké dans la propriété d'objet standard avec le nom'0'
. C'est un simple accès à la propriété. La seule conversion de type découle de la conversion implicite du nombre0
en chaîne'0'
. Donc, si la conversion de type est un problème, vous pouvez utiliser à la$.find(selector)['0']
place.Vous pouvez utiliser:
Un peu plus élégant, peut-être.
la source
666
ont probablement de nombreuses autres raisons pour lesquelles leur code est cassé. Bien qu'il s'agisse d'un sélecteur non valide, $ (666) .length est un javascript valide : il est évalué comme véridique et doit donc satisfaire à la condition.$.find(666).length
fonctionne.Ce plugin peut être utilisé dans une
if
instruction commeif ($(ele).exist()) { /* DO WORK */ }
ou en utilisant un rappel.Brancher
jsFiddle
Vous pouvez spécifier un ou deux rappels. Le premier se déclenchera si l'élément existe, le second se déclenchera si l'élément n'existe pas . Cependant, si vous choisissez de ne transmettre qu'une seule fonction, elle ne se déclenchera que lorsque l'élément existera. Ainsi, la chaîne mourra si l'élément sélectionné n'existe pas . Bien sûr, si elle existe, la première fonction se déclenchera et la chaîne continuera.
Gardez à l'esprit que l'utilisation de la variante de rappel permet de maintenir la chaîne - l'élément est renvoyé et vous pouvez continuer à chaîner des commandes comme avec toute autre méthode jQuery!
Exemples d'utilisation
la source
Has Items
rappel ne doit-il pas réellement passer l'objet comme argument?Je vois que la plupart des réponses ici ne sont pas exactes comme elles devraient l'être, elles vérifient la longueur des éléments, cela peut être OK dans de nombreux cas, mais pas à 100% , imaginez si le nombre passe à la fonction à la place, donc je prototype une fonction qui vérifie tout conditions et retourner la réponse comme il se doit:
Cela vérifiera à la fois la longueur et le type, vous pouvez maintenant le vérifier de cette façon:
la source
Il n'y a pas vraiment besoin de jQuery. Avec du JavaScript simple, il est plus facile et sémantiquement correct de vérifier:
Si, pour une raison quelconque, vous ne souhaitez pas mettre d'ID dans l'élément, vous pouvez toujours utiliser toute autre méthode JavaScript conçue pour accéder au DOM.
jQuery est vraiment cool, mais ne laissez pas le JavaScript pur tomber dans l'oubli ...
la source
:has()
?Vous pouvez utiliser ceci:
la source
La raison pour laquelle toutes les réponses précédentes nécessitent le
.length
paramètre est qu'elles utilisent principalement le$()
sélecteur de jquery qui a querySelectorAll derrière les rideaux (ou ils l'utilisent directement). Cette méthode est plutôt lente car elle doit analyser l'arborescence DOM entière en recherchant toutes les correspondances avec ce sélecteur et en remplissant un tableau avec elles.Le paramètre ['length'] n'est pas nécessaire ou utile et le code sera beaucoup plus rapide si vous l'utilisez directement à la
document.querySelector(selector)
place, car il renvoie le premier élément auquel il correspond ou null s'il n'est pas trouvé.Cependant, cette méthode nous laisse avec l'objet réel retourné; ce qui est bien s'il ne sera pas enregistré en tant que variable et utilisé à plusieurs reprises (conservant ainsi la référence si nous oublions).
Dans certains cas, cela peut être souhaité. Il peut être utilisé dans une boucle for comme ceci:
Si vous n'avez pas vraiment besoin de l'élément et que vous voulez obtenir / stocker juste un vrai / faux, doublez-le pas !! Cela fonctionne pour les chaussures qui se délient, alors pourquoi nouer ici?
la source
C'est
$.contains()
ce que tu veux?la source
Je l'ai trouvé
if ($(selector).length) {}
insuffisant. Il cassera silencieusement votre application lorsqu'unselector
objet est vide{}
.Ma seule suggestion est d'effectuer une vérification supplémentaire pour
{}
.Je cherche toujours une meilleure solution car celle-ci est un peu lourde.
Edit: AVERTISSEMENT! Cela ne fonctionne pas dans IE quand
selector
est une chaîne.la source
$()
d' appeler avec un objet vide comme argument?{}
à$()
?Vous pouvez vérifier que l'élément est présent ou n'utilise pas la longueur dans le script java. Si la longueur est supérieure à zéro, l'élément est présent. Si la longueur est nulle, l'élément n'est pas présent.
la source
La vérification de l'existence d'un élément est parfaitement documentée sur le site officiel jQuery lui-même!
la source
c'est très similaire à toutes les réponses, mais pourquoi ne pas utiliser l'
!
opérateur deux fois pour obtenir un booléen:la source
Boolean(x)
peut parfois être plus efficace.la source
if
où unif
améliorerait la lisibilité au prix de 2 octets.&&
pour vous.Essayez de tester l'
DOM
élémentla source
Inspiré par la réponse de hiway, j'ai trouvé ce qui suit:
jQuery.contains prend deux éléments DOM et vérifie si le premier contient le second.
Utiliser
document.documentElement
comme premier argument remplit la sémantique de laexists
méthode quand on veut l'appliquer uniquement pour vérifier l'existence d'un élément dans le document courant.Ci-dessous, j'ai mis en place un extrait qui se compare
jQuery.exists()
aux approches$(sel)[0]
et$(sel).length
qui renvoient toutes les deuxtruthy
valeurs pour$(4)
tout$(4).exists()
rendementfalse
. Dans le contexte de la vérification de l'existence d'un élément dans le DOM, cela semble être le résultat souhaité .Afficher l'extrait de code
la source
Pas besoin de jQuery (solution de base)
Option beaucoup plus performante ci-dessous (remarquez l'absence d'un point avant une classe).
querySelector utilise un moteur de correspondance approprié comme $ () (sizzle) dans jQuery et utilise plus de puissance de calcul, mais dans 99% des cas, cela ira très bien. La deuxième option est plus explicite et indique exactement au code ce qu'il faut faire. C'est beaucoup plus rapide selon jsperf https://jsperf.com/getelementsbyclassname-vs-queryselectorall/25
la source
J'aime simplement utiliser du javascript simple vanille pour ce faire.
la source
Je suis tombé sur cette question et je voudrais partager un extrait de code que j'utilise actuellement:
Et maintenant je peux écrire du code comme ça -
Cela peut sembler beaucoup de code, mais lorsqu'il est écrit en CoffeeScript, il est assez petit:
la source
J'ai eu un cas où je voulais voir si un objet existe à l'intérieur d'un autre alors j'ai ajouté quelque chose à la première réponse pour vérifier s'il y avait un sélecteur à l'intérieur du sélecteur ..
la source
Que diriez-vous:
C'est très minime et vous évite d'avoir à enfermer le sélecteur à
$()
chaque fois.la source
if($("#thing").exists(){}
lit comme. De plus, ce n'est pas la manière jQuery.J'utilise ceci:
N'exécutez la chaîne que s'il existe un élément jQuery - http://jsfiddle.net/andres_314/vbNM3/2/
la source
Voici ma
exist
méthode préférée dans jQueryet une autre version qui prend en charge le rappel lorsque le sélecteur n'existe pas
Exemple:
la source
$("selector"
) renvoie un objet qui a lalength
propriété. Si le sélecteur trouve des éléments, ils seront inclus dans l'objet. Donc, si vous vérifiez sa longueur, vous pouvez voir si des éléments existent. En JavaScript0 == false
, donc si vous n'obtenez pas0
votre code, il s'exécutera.la source
Voici l'exemple complet de différentes situations et de la façon de vérifier si l'élément existe en utilisant direct if on jQuery selector peut ou peut ne pas fonctionner car il retourne un tableau ou des éléments.
SOLUTION FINALE
la source
Vous n'avez pas à vérifier si c'est plus grand que
0
comme$(selector).length > 0
,$(selector).length
c'est suffisant et une manière élégante de vérifier l'existence d'éléments. Je ne pense pas que cela vaille la peine d'écrire une fonction uniquement pour cela, si vous voulez faire plus de choses supplémentaires, oui.la source