¿Cómo puedo detectar si un selector devuelve nulo?

Resuelto peirix asked hace 15 años • 8 respuestas

¿Cuál es la mejor manera de detectar si un selector jQuery devuelve un objeto vacío? Si lo haces:

alert($('#notAnElement'));

obtienes [objeto Objeto], así que la forma en que lo hago ahora es:

alert($('#notAnElement').get(0));

que escribirá "indefinido", por lo que puede verificarlo. Pero parece muy malo. ¿Qué otra manera hay?

peirix avatar May 28 '09 17:05 peirix
Aceptado

Mi favorito es ampliar jQuery con esta pequeña comodidad:

$.fn.exists = function () {
    return this.length !== 0;
}

Usado como:

$("#notAnElement").exists();

Más explícito que usar longitud.

Magnar avatar May 28 '2009 11:05 Magnar
if ( $("#anid").length ) {
  alert("element(s) found")
} 
else {
  alert("nothing found")
}
duckyflip avatar May 28 '2009 10:05 duckyflip

El selector devuelve una matriz de objetos jQuery. Si no se encuentran elementos coincidentes, devuelve una matriz vacía. Puede verificar la .lengthcolección devuelta por el selector o verificar si el primer elemento de la matriz está "indefinido".

Puede utilizar cualquiera de los siguientes ejemplos dentro de una declaración IF y todos producirán el mismo resultado. Verdadero, si el selector encontró un elemento coincidente, falso en caso contrario.

$('#notAnElement').length > 0
$('#notAnElement').get(0) !== undefined
$('#notAnElement')[0] !== undefined
Jose Basilio avatar May 28 '2009 11:05 Jose Basilio

Me gusta hacer algo como esto:

$.fn.exists = function(){
    return this.length > 0 ? this : false;
}

Entonces puedes hacer algo como esto:

var firstExistingElement = 
    $('#iDontExist').exists() ||      //<-returns false;
    $('#iExist').exists() ||          //<-gets assigned to the variable 
    $('#iExistAsWell').exists();      //<-never runs

firstExistingElement.doSomething();   //<-executes on #iExist

http://jsfiddle.net/vhbSG/

CSharp avatar Jun 02 '2012 10:06 CSharp