Existe-t-il un moyen dans jQuery de vérifier si any parent, grand-parent, arrière-grand-parent a une classe.
J'ai une structure de balisage qui m'a laissé faire ce genre de chose dans le code:
$(elem).parent().parent().parent().parent().hasClass('left')
Cependant, pour la lisibilité du code, j'aimerais éviter ce genre de chose. Y a-t-il un moyen de dire "n'importe quel parent/grand-parent/arrière-grand-parent a cette classe"?
J'utilise jQuery 1.7.2.
if ($elem.parents('.left').length) {
}
Il existe de nombreuses façons de filtrer les ancêtres d'éléments.
if ($elem.closest('.parentClass').length /* > 0*/) {/*...*/}
if ($elem.parents('.parentClass').length /* > 0*/) {/*...*/}
if ($elem.parents().hasClass('parentClass')) {/*...*/}
if ($('.parentClass').has($elem).length /* > 0*/) {/*...*/}
if ($elem.is('.parentClass *')) {/*...*/}
Attention, closest()
cette méthode inclut l'élément lui-même lors de la recherche du sélecteur.
Si vous avez un sélecteur unique correspondant au $elem
, par exemple #myElem
, vous pouvez utiliser:
if ($('.parentClass:has(#myElem)').length /* > 0*/) {/*...*/}
if(document.querySelector('.parentClass #myElem')) {/*...*/}
Si vous souhaitez faire correspondre un élément dépendant de sa classe ancêtre à des fins de style uniquement, utilisez une règle CSS :
.parentClass #myElem { /* CSS property set */ }
Vous pouvez utiliser la méthode parents
avec le sélecteur spécifié .class
et vérifier si l'un d'entre eux lui correspond:
if ($elem.parents('.left').length != 0) {
//someone has this class
}