Essa if
condição é o que está me causando problemas:
if (div id=myfav has children) {
do something
} else {
do something else
}
Eu tentei o seguinte:
if ( $('#myfav:hasChildren') ) { do something }
if ( $('#myfav').children() ) { do something }
if ( $('#myfav:empty') ) { do something }
if ( $('#myfav:not(:has(*))') ) { do something }
children().length
deve ser chamado em vez de tamanho () por docs jQuery aqui: api.jquery.com/sizeEsse trecho determinará se o elemento tem filhos usando o
:parent
seletor:Observe que
:parent
também considera um elemento com um ou mais nós de texto como pai.Portanto, os
div
elementos em<div>some text</div>
e<div><span>some text</span></div>
serão considerados pais, mas<div></div>
não são pais.fonte
#myfav
e:parent
no seu exemplo, caso contrário, o seletor não é o mesmo que minha resposta forneceria.Additional Notes: Because :parent is a jQuery extension and not part of the CSS specification, queries using :parent cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :parent to select elements, first select the elements using a pure CSS selector, then use .filter(":parent").
Outra opção, apenas para o inferno seria:
Na verdade, pode ser o mais rápido, pois usa estritamente o mecanismo Sizzle e não necessariamente qualquer jQuery, por assim dizer. Pode estar errado. No entanto, funciona.
fonte
Na verdade, existe um método nativo bastante simples para isso:
Observe que isso também inclui nós de texto simples, portanto será verdadeiro para a
<div>text</div>
.fonte
$(...)[0] is undefined
isso pode acontecer se#myfav
não for encontrado. Eu testar a existência do primeiro elemento combinado antes para aplicar essa condição, ou seja:$('#myfav')[0] && $('#myfav')[0].hasChildNodes()
.e se você quiser verificar div tem filhos perticulares (diga
<p>
use:fonte
Você também pode verificar se div tem filhos específicos ou não,
fonte
A maneira jQuery
No jQuery, você pode usar
$('#id').children().length > 0
para testar se um elemento tem filhos.Demo
O caminho da baunilha JS
Se você não quiser usar o jQuery, poderá
document.getElementById('id').children.length > 0
testar se um elemento tem filhos.Demo
fonte