jquery si div id a des enfants
Ce if
condition est ce qui me fait mal:
if (div id=myfav has children) {
do something
} else {
do something else
}
J'ai essayé toutes les conditions suivantes:
if ( $('#myfav:hasChildren') ) { do something }
if ( $('#myfav').children() ) { do something }
if ( $('#myfav:empty') ) { do something }
if ( $('#myfav:not(:has(*))') ) { do something }
Vous devez vous connecter pour publier un commentaire.
Cela devrait fonctionner. Le
children()
fonction retourne un objet JQuery qui contient les enfants. Vous avez juste besoin de vérifier la taille et voir si elle a au moins un enfant.children().length
doit être appelée au lieu de la taille() par jQuery docs ici: api.jquery.com/sizeCet extrait de déterminer si l'élément a des enfants à l'aide de la
:parent
sélecteur:Noter que
:parent
estime également un élément avec un ou plusieurs nœuds de texte pour être un parent.Ainsi, le
div
éléments dans<div>some text</div>
et<div><span>some text</span></div>
seront chaque être considéré comme un parent, mais<div></div>
n'est pas un parent.($('#myfav :parent').length > 0)
être plus rapide? Je trouve le vôtre plus lisible, de sorte qu'il n'est probablement pas la peine de le commerce dans la plupart des situations.#myfav
et:parent
dans votre exemple, sinon le sélecteur n'est pas le même que ce que ma réponse serait de fournir.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").
:parent
sélecteur prend en compte tous les nœuds de texte -- qui comprend un espace blanc -- donc.is(':parent')
est vrai si vous aviez un seul espace, comme<div> </div>
.Une autre option, juste pour le fun, il serait:
Est peut être le plus rapide car il utilise strictement le Grésillement du moteur et pas nécessairement de jQuery, comme elle l'avait fait. Pourrait être mal. Néanmoins, il fonctionne.
Il y a en fait assez simple, une méthode native pour cela:
Noter que cela inclut aussi simple nœuds de texte, de sorte qu'il sera vrai pour un
<div>text</div>
.$(...)[0] is undefined
cela peut se produire si#myfav
n'est pas trouvé. J'aimerais tester l'existence de la première appariés élément avant d'appliquer cette condition, c'est à dire:$('#myfav')[0] && $('#myfav')[0].hasChildNodes()
.et si vous voulez vérifier div a un particulier des enfants(dire
<p>
utilisation:Vous pouvez aussi vérifier si la div a des enfants ou pas,
Le jQuery façon
En jQuery, vous pouvez utiliser
$('#id').children().length > 0
pour tester si un élément a des enfants.Démo
JS:
CSS:
HTML:
La vanille JS façon
Si vous ne souhaitez pas utiliser jQuery, vous pouvez utiliser
document.getElementById('id').children.length > 0
pour tester si un élément a des enfants.Démo
JS:
CSS:
HTML: