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

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.

futuraprime
fonte
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
}
John Hartsock
fonte
11
!$.isEmptyObject($.find('#id'))

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

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

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

Blackjoker
fonte