Risposte:
Controlla le FAQ di jQuery ...
È possibile utilizzare la proprietà length della raccolta jQuery restituita dal selettore:
if ( $('#myDiv').length ){}
lenght
posto di length
; è un errore di ortografia.
.length
.
(Dal momento che non ho abbastanza reputazione per votare la risposta ...)
Wolf ha scritto:
Chiamare la proprietà length su un oggetto indefinito o nullo farà fallire i browser IE e webkit!
Invece prova questo:
// NOTE!! THE FOLLOWING IS WRONG; DO NOT USE! -- EleotleCram if($("#something") !== null){ // do something }
o
// NOTE!! THE FOLLOWING IS WRONG; DO NOT USE! -- EleotleCram if($("#something") === null){ // don't do something }
Mentre è vero che chiamare la proprietà length su un oggetto indefinito o nullo farà fallire i browser, il risultato dei selettori di jQuery ($ ('...')) non sarà mai nullo o indefinito. Quindi i suggerimenti sul codice non hanno senso. Usa una delle altre risposte, hanno più senso.
(Aggiornamento 2012) Perché le persone guardano il codice e questa risposta è piuttosto in cima alla lista: Negli ultimi due anni, ho usato questo piccolo plugin:
jQuery.fn['any'] = function() {
return (this.length > 0);
};
Penso che $ ('div'). Any () sia migliore di $ ('div'). Length , in più non soffrirai tanto per errori di battitura: $ ('div'). Ayn () darà un errore di runtime , $ ('div'). La lunghezza in silenzio molto probabilmente sarà sempre falsa.
__
Modifica novembre 2012:
1) Poiché la gente tende a guardare il codice e non a leggere ciò che viene detto intorno al codice, ho aggiunto due grandi note da leggere al codice citato di Wolf.
2) Ho aggiunto il codice del piccolo plugin che utilizzo per questa situazione.
La funzione di ricerca restituisce una matrice di elementi corrispondenti. È possibile verificare se la lunghezza è zero. Nota la modifica per cercare gli elementi solo una volta e riutilizzare i risultati secondo necessità.
var elem = $("#btext" + i);
if (elem.length != 0) {
elem.text("Branch " + i);
}
Inoltre, hai provato a usare solo la funzione text - se non esiste alcun elemento, non farà nulla.
$("#btext" + i).text("Branch " + i);
La funzione jquery $ () restituisce sempre un valore non nullo - elementi medi corrispondenti alla cretaria del selettore. Se l'elemento non è stato trovato, verrà restituito un array vuoto. Quindi il tuo codice sarà simile a questo -
if ($("#btext" + i).length){
//alert($("#btext" + i).text());
$("#btext" + i).text("Branch " + i);
}
In jQuery 1.4 ottieni la funzione $ .isEmptyObject, ma se sei costretto a usare una versione precedente di jQ come noi poveri sviluppatori di Drupal semplicemente rubi usa questo codice:
// This is a function similar to the jQuery 1.4 $.isEmptyObject.
function isObjectEmpty(obj) {
for ( var name in obj ) {
return false;
}
return true;
}
Usalo come:
console.log(isObjectEmpty(the_object)); // Returns true or false.
indipendentemente dalla selezione effettuata, la funzione $()
restituisce sempre un oggetto jQuery in modo che non possa essere utilizzato per il test. Il modo migliore ancora (se non l'unico) è usare la size()
funzione o la proprietà della lunghezza nativa come spiegato sopra.
if ( $('selector').size() ) {...}
if ( $('#whatever')[0] ) {...}
L'oggetto jQuery che viene restituito da tutti i metodi nativi jQuery NON è un array, è un oggetto con molte proprietà; uno di questi è una proprietà "lunghezza". Puoi anche controllare size () o get (0) o get () - 'get (0)' funziona allo stesso modo dell'accesso al primo elemento, ovvero $ (elem) [0]
Che dire dell'utilizzo di "undefined"?
if (value != undefined){ // do stuff }
usare $("#selector").get(0)
per verificare con null in questo modo. get restituisce l'elemento dom, fino ad allora hai a che fare con un array, dove devi controllare la proprietà length. Personalmente non mi piace il controllo della lunghezza per la gestione nulla, mi confonde per qualche motivo :)
Usando la proprietà length puoi farlo.
jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) {
//do somthing
}