Determinare se jQuery non ha trovato alcun elemento


127

Sto usando i selettori di jQuery, in particolare il selettore di ID:

$("#elementId")...

Come dovrei determinare se jQuery ha trovato l'elemento o no? Anche se l'elemento con l'id specificato non esiste, la prossima istruzione mi dà:[object Object]

alert($("#idThatDoesnotexist"));

Risposte:


188

$('#idThatDoesnotexist').lengthè quello che stai cercando. (Se non trova nulla, lo farà === 0.) Quindi la tua dichiarazione condizionale dovrebbe probabilmente essere:

if ($ ('# id'). length) {/ * code if found * /} else {/ * code if not found * /}

Stai ricevendo un oggetto restituito da quell'avviso perché jQuery (quasi) restituisce sempre "l'oggetto jQuery" quando lo usi, che è un wrapper per gli elementi trovati da jQuery che consente il concatenamento dei metodi.


3
Non è necessario lo zero, $ ('# id'). La lunghezza è sufficiente (zero == false in javascript)
David Hellsing,

13
@David il fatto che non ne hai bisogno non lo rende necessariamente ridondante, a prima vista IMO lo rende più chiaro.
Abir

1
@ Abir: Rende solo più chiaro fino a quando non sei abituato alla sintassi senza di essa, testando la veridicità piuttosto che esplicitamente 0. Suggerisco semplicemente di abituarti alla sintassi senza == 0, la vedrai ovunque.
Scott Stafford

@ScottStafford, per più spazio, puoi anche usare if (!!$('#id').length), che fa un cast booleano.
Daniele Vrut

6
Dovresti anche considerare se i vantaggi del salvataggio di un paio di caratteri compensano la potenziale confusione quando qualcuno che non ha familiarità con le sfumature di Javascript legge il codice. Non è la migliore pratica per quanto riguarda la manutenibilità, secondo me.
Matt Carr

26

Futuraprime ha ragione ma puoi abbreviare la sintassi procedendo come segue:

if ($("#id").length) {
   //at least one element was found
} else {
   //no elements found
}

11
!$.isEmptyObject($.find('#id'))

Questo restituirà true se l'elemento esiste e false in caso contrario.


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

Questa è la base, ora fai quello che vuoi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.