Déterminer si jQuery n'a trouvé aucun élément

127

J'utilise les sélecteurs de jQuery, en particulier le sélecteur d'id:

$("#elementId")...

Comment dois-je déterminer si jQuery a trouvé l'élément ou non? Même si l'élément avec l'ID spécifié n'existe pas, l'instruction suivante me donne:[object Object]

alert($("#idThatDoesnotexist"));
Bardock
la source

Réponses:

188

$('#idThatDoesnotexist').lengthest ce que vous recherchez. (S'il ne trouve rien, ce sera le cas === 0.) Donc, votre instruction conditionnelle devrait probablement être:

if ($ ('# id'). length) {/ * code si trouvé * /} else {/ * code si non trouvé * /}

Vous obtenez un objet renvoyé par cette alerte car jQuery renvoie (presque) toujours l '"objet jQuery" lorsque vous l'utilisez, qui est un wrapper pour les éléments trouvés par jQuery qui permet le chaînage de méthodes.

futuraprime
la source
3
Vous n'avez pas besoin du zéro, $ ('# id'). La longueur est suffisante (zéro == false en javascript)
David Hellsing
13
@David le fait que vous n'en ayez pas besoin ne le rend pas nécessairement redondant, à première vue IMO, cela le rend plus clair.
Abir
1
@Abir: Cela ne fait que rendre les choses plus claires jusqu'à ce que vous soyez habitué à la syntaxe sans elle, en testant la véracité plutôt que explicitement 0. Je suggère simplement de vous habituer à la syntaxe sans le == 0, vous le verrez partout.
Scott Stafford le
@ScottStafford, pour plus de jeu, vous pouvez également utiliser if (!!$('#id').length), qui font un cast booléen.
Daniele Vrut
6
Vous devez également vous demander si les avantages de sauvegarder quelques caractères compensent la confusion potentielle lorsqu'une personne ne connaissant pas les nuances de Javascript lit le code. Pas de meilleure pratique en ce qui concerne la maintenabilité à mon avis.
Matt Carr
26

Futuraprime a raison, mais vous pouvez raccourcir votre syntaxe en procédant comme suit:

if ($("#id").length) {
   //at least one element was found
} else {
   //no elements found
}
John Hartsock
la source
11
!$.isEmptyObject($.find('#id'))

Cela retournera true si l'élément existe et false dans le cas contraire.

Les thermes
la source
7
$('#my_selector').length > 0 
$('#my_selector').get(0) !== undefined
$('#my_selector')[0] !== undefined

C'est la base, maintenant faites ce que vous voulez.

Blackjoker
la source