Determinar si jQuery no ha encontrado ningún elemento

126

Estoy usando los selectores de jQuery, especialmente el selector de id:

$("#elementId")...

¿Cómo debo determinar si jQuery ha encontrado el elemento o no? Incluso si el elemento con la identificación especificada no existe, la siguiente declaración me da:[object Object]

alert($("#idThatDoesnotexist"));
Bardock
fuente

Respuestas:

187

$('#idThatDoesnotexist').lengthes lo que estás buscando (Si no encuentra nada, esto lo hará === 0). Entonces, su declaración condicional probablemente debería ser:

if ($ ('# id'). length) {/ * código si se encuentra * /} más {/ * código si no se encuentra * /}

Obtendrá un objeto devuelto por esa alerta porque jQuery (casi) siempre devuelve el "objeto jQuery" cuando lo usa, que es un contenedor para los elementos encontrados por jQuery que permite el encadenamiento de métodos.

futuraprime
fuente
3
No necesita el cero, $ ('# id'). La longitud es suficiente (cero == falso en javascript)
David Hellsing
13
@David el hecho de que no lo necesite no necesariamente lo hace redundante, a primera vista IMO lo deja más claro.
Abir
1
@Abir: Solo lo hace más claro hasta que esté acostumbrado a la sintaxis sin ella, probando la veracidad en lugar de explícitamente 0. Sugiero simplemente acostumbrarse a la sintaxis sin la == 0, la verá en todas partes.
Scott Stafford
@ScottStafford, para obtener más espacio, también puede usar if (!!$('#id').length), que hacen un molde booleano.
Daniele Vrut
66
También debe considerar si los beneficios de guardar un par de caracteres compensan la posible confusión cuando alguien que no está familiarizado con los matices de Javascript lee el código. No es la mejor práctica en lo que respecta a la mantenibilidad en mi opinión.
Matt Carr
26

Futuraprime tiene razón, pero puede acortar su sintaxis haciendo lo siguiente:

if ($("#id").length) {
   //at least one element was found
} else {
   //no elements found
}
John Hartsock
fuente
11
!$.isEmptyObject($.find('#id'))

Esto devolverá verdadero si el elemento existe y falso si no existe.

Balnearios
fuente
7
$('#my_selector').length > 0 
$('#my_selector').get(0) !== undefined
$('#my_selector')[0] !== undefined

Esto es lo básico, ahora haz lo que quieras.

Blackjoker
fuente