Determinando se o jQuery não encontrou nenhum elemento


126

Estou usando os seletores do jQuery, especialmente o seletor de identificação:

$("#elementId")...

Como devo determinar se o jQuery encontrou o elemento ou não? Mesmo que o elemento com o ID especificado não exista, a próxima instrução me fornecerá:[object Object]

alert($("#idThatDoesnotexist"));

Respostas:


187

$('#idThatDoesnotexist').lengthé o que você está procurando. (Se não encontrar nada, isso ocorrerá === 0.) Portanto, sua declaração condicional provavelmente deve ser:

if ($ ('# id'). length) {/ * código se encontrado * /} else {/ * código se não for encontrado * /}

Você está recebendo um objeto retornado desse alerta porque o jQuery (quase) sempre retorna o "objeto jQuery" quando você o usa, que é um invólucro para os elementos encontrados pelo jQuery que permitem o encadeamento de métodos.


3
Você não precisa de comprimento é o suficiente (zero == false em JavaScript) a zero, $ ( '# id').
David Hellsing

13
@David o fato de que você não precisa , não necessariamente o torna redundante; à primeira vista, o IMO torna mais claro.
Abir

1
@Abir: Isso só torna mais claro até que você esteja acostumado com a sintaxe sem ela, testando a veracidade e não explicitamente 0. Eu sugiro que simplesmente se acostume com a sintaxe sem a == 0, você a verá em todos os lugares.
Scott Stafford

@ScottStafford, para obter mais folga, você também pode usar if (!!$('#id').length)isso que faz uma conversão booleana.
Daniele Vrut

6
Você também deve considerar se os benefícios de salvar alguns caracteres compensam a possível confusão quando alguém não familiarizado com as nuances do Javascript lê o código. Não é uma boa prática, no que diz respeito à manutenção, na minha opinião.
Matt Carr

26

O Futuraprime está certo, mas você pode reduzir sua sintaxe fazendo o seguinte:

if ($("#id").length) {
   //at least one element was found
} else {
   //no elements found
}

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

Isso retornará verdadeiro se o elemento existir e falso se não existir.


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

Este é o básico, agora faça o que quiser.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.