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"));

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.


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
}

11
!$.isEmptyObject($.find('#id'))

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


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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.