Sto lavorando per creare un modo più semantico di controllo degli elementi con jQuery. Utilizzando $("#element").length > 0
solo in realtà non mi sento molto bene formulate per me, così io sto facendo la mia aggiunta di selezione per l'utilizzo in .is
:Restituisce "True" su jQuery Selector Array vuoto?
if($("#element").is(":present")) {
console.log("It's aliiiveeee!!");
}
Quella parte è stato facile, come questo:
$.extend($.expr[':'],{
present: function(a) {
return $(a).length > 0;
}
});
voglio fare un passo ulteriore, e rendere più facile per vedere se un elemento non esiste, utilizzando la sintassi simile:
$.extend($.expr[':'],{
present: function(a) {
return $(a).length > 0;
},
absent: function(a) {
return $(a).length === 0;
}
});
$(function() {
if($("#element").is(":absent")) {
console.log("He's dead, Jim.");
}
});
Ma questa parte è sorprendentemente difficile da fare. Penso che sia perché sto abbattendo gli elementi restituiti per ottenere un risultato, e il paring del selettore su .length === 0 è lo stesso che non richiedere nessun elemento: restituisce false indipendentemente da cosa.
Ho provato un sacco di modi diversi per invertire le cose e ottenere questo per tornare vero quando l'elemento non esiste, e falso se lo fa:
return $(a).length === 0;
return !($(a).length > 0);
if(!($(a).length > 0)) {
return true;
}
if($(a).length > 0) {
return false;
} else {
return true;
}
return !!($(a).length === 0);
// etc...
C'è un modo semplice per ottenere questo per restituire solo true se l'elemento non esiste e false se lo fa?
Quindi, '.is' non è progettato per restituire true quando non ci sono elementi nel set di selettori abbinati? Un'altra opzione che avevo preso in considerazione era l'utilizzo di: 'if ($ (" #elemento "). È (": not (: present) ")) { console.log (" È morto, Jim. "); } Ma stranamente, anche questo non funziona. –
@Code Junkie: Ancora una volta, non hai alcun elemento per usare '.is()', in modo tale che semplicemente la funzione non venga chiamata. Non importa quale selettore ci passi, niente succederà! – BoltClock
Quindi potrebbe non esserci modo di restituire true su un risultato di selettore vuoto? –