2011-08-21 19 views
32

Estoy acostumbrado a Prototypejs, donde $$ ("selector") devolverá nulo si no se encontraron elementos. Esto es conveniente porque puedo hacerComprobando si un selector jQuery no encuentra ningún resultado

if ($$("selector")) {} 

para verificar si un elemento está en el DOM.

Sin embargo, en jQuery $ (selector) devolverá [] Si no se encuentra ningún elemento, por lo que ahora tengo que hacer:

if ($(selector).length > 0) 

Esto hace que el código un poco más difícil de leer.

Mi pregunta: ¿Cuál es la mejor manera de hacerlo? ¿Debo extender el objeto jQuery con métodos como .empty() y .any(), o hay funciones integradas para hacer esto?

Actualización: Esto también se aplica a otros selectores de jQuery que debe, de todos modos, sólo devuelven un resultado (como padre(), o más cercano())

+6

Sólo tiene que hacer 'if ($ (selector) .length)' ya que parece que el '0' se Falsey- ... –

+4

deshacerse del' > 0' predicado. Es redundante – adarshr

Respuesta

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

utilizado como:

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

idk si es más rápido o si es importante, pero puede usar '$ .fn.exists = function() {return !! this [0]; } 'también –

14

Usando length es la mejor manera. No debe usar empty() o size() > 0 ya que eso solo agrega otra entrada a la pila de llamadas.

+6

Usando if ($ (select) .length) funciona bastante bien, ¡olvidé que podía omitir el> 0! – micho

11
if ($(selector)[0]) 

Eso lo hará.

+2

+1 ¡Corto y rápido! – user113716

+0

ty, @patrick :) –

Cuestiones relacionadas