Qual é a melhor maneira de detectar se um seletor de jQuery retorna um objeto vazio. Se você fizer:
alert($('#notAnElement'));
você obtém [objeto Objeto], então a forma como faço agora é:
alert($('#notAnElement').get(0));
que escreverá "indefinido" e você poderá verificar isso. Mas parece muito ruim. Que outro caminho existe?
jquery
jquery-selectors
peirix
fonte
fonte
this
é muito mais útil do quetrue
. Veja minha resposta portando opresence
método Rails .this
a uma variável, eu recomendaria alterar a declaração de retorno para o que o CSharp possui.fonte
O seletor retorna uma matriz de objetos jQuery. Se nenhum elemento correspondente for encontrado, ele retornará uma matriz vazia. Você pode verificar a
.length
coleção retornada pelo seletor ou verificar se o primeiro elemento da matriz é 'indefinido'.Você pode usar qualquer um dos seguintes exemplos dentro de uma instrução IF e todos eles produzem o mesmo resultado. Verdadeiro, se o seletor encontrou um elemento correspondente, falso caso contrário.
fonte
.length
menos que o código esteja quente. É certamente o mais claro com intenção. Além disso,.size()
está obsoleto e está há anos (desde 1,8). Vou apenas editar sua resposta e removê-la. Sinta-se à vontade para adicioná-la novamente com uma nota, mas é tão antiga que acho melhor ir.Eu gosto de fazer algo assim:
Então você pode fazer algo assim:
http://jsfiddle.net/vhbSG/
fonte
TypeError: firstExistingElement.doSomething is not a function
. Você pode embrulhar toda a atribuição de variável / teste em uma if () e apenas fazer algo se um elemento é encontrado ....Eu gosto de usar
presence
, inspirado no Ruby on Rails :Seu exemplo se torna:
Acho que é superior ao proposto
$.fn.exists
porque você ainda pode usar operadores booleanos ouif
, mas o resultado verdadeiro é mais útil. Outro exemplo:fonte
Minha preferência, e eu não tenho idéia por que isso ainda não está no jQuery:
Usado assim:
Ou, como parece no CoffeeScript:
fonte
Isso está na documentação do JQuery:
http://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-exists/
fonte
Você pode fazer isso o tempo todo por padrão. Eu tenho lutado para quebrar a função jquery ou o método jquery.fn.init para fazer isso sem erros, mas você pode fazer uma alteração simples na fonte do jquery para fazer isso. Estão incluídas algumas linhas circundantes que você pode pesquisar. Eu recomendo procurar na fonte jquery por
The jQuery object is actually just the init constructor 'enhanced'
Por último, mas não menos importante, você pode obter o código fonte do jquery não compactado aqui: http://code.jquery.com/
fonte