Estoy trabajando para crear una forma más semántica de verificar elementos con jQuery. Usando $("#element").length > 0
acaba realmente no se siente muy bien redactado para mí, así que estoy haciendo mi propio Además de selección para su uso en .is
:¿Devuelve "verdadero" en la matriz de selección jQuery vacía?
if($("#element").is(":present")) {
console.log("It's aliiiveeee!!");
}
Esa parte fue fácil, como esto:
$.extend($.expr[':'],{
present: function(a) {
return $(a).length > 0;
}
});
yo quiero ir un paso más allá, y que sea fácil de ver si un elemento no existe, utilizando una sintaxis similar:
$.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.");
}
});
Pero esta parte es sorprendentemente difícil de hacer. Creo que es porque estoy recortando los elementos devueltos para obtener un resultado, y pelar el selector en .length === 0 es lo mismo que pedir ningún elemento: devuelve falso sin importar qué.
he intentado un montón de diferentes maneras de revertir las cosas y conseguir que esto devuelve true cuando el elemento no existe, y falso si no lo hace:
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...
¿Hay una manera fácil obtener esto para simplemente devolver verdadero si el elemento no existe, y falso si lo hace?
Entonces, '.is' en realidad no está diseñado para devolver verdadero cuando no existen elementos en el conjunto de selectores coincidentes? Otra opción que había considerado era simplemente usar: 'if ($ (" # element "). Is (": not (: present) ")) { console.log (" Está muerto, Jim ".); } ' Pero, curiosamente, eso tampoco funciona. –
@Code Junkie: Nuevamente, no tiene ningún elemento para usar '.is()' con, por lo que esa función simplemente no se llamará. No importa qué selector le arrojes, ¡no pasará nada! – BoltClock
¿Entonces puede que no haya forma de devolver verdadero en un resultado de selector vacío? –