it-swarm.com.de

Überprüfen Sie mithilfe von jQuery, ob ein Vorfahr eine Klasse hat

Gibt es in jQuery eine Möglichkeit zu überprüfen, ob any parent, grand-parent, great-grand-parent eine Klasse hat.

Ich habe eine Markup-Struktur, die mich dazu veranlasst hat, solche Dinge im Code zu tun:

$(elem).parent().parent().parent().parent().hasClass('left')

Aus Gründen der Lesbarkeit des Codes möchte ich dies jedoch vermeiden. Gibt es eine Möglichkeit zu sagen, dass ein Elternteil/Großelternteil/Urgroßelternteil diese Klasse hat?

Ich benutze jQuery 1.7.2.

134
crmpicco
if ($elem.parents('.left').length) {

}
270
Alex

Es gibt viele Möglichkeiten, nach Elementvorfahren zu filtern.

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 *')) {/*...*/} 

Vorsicht, closest() Methode schließt Element selbst ein, während auf Auswahl geprüft wird.

Wenn Sie einen eindeutigen Selektor haben, der mit $elem Übereinstimmt, z. B. #myElem, Können Sie Folgendes verwenden:

if ($('.parentClass:has(#myElem)').length /* > 0*/) {/*...*/}
if(document.querySelector('.parentClass #myElem')) {/*...*/}

Wenn Sie ein Element, das von einer seiner Vorgängerklassen abhängt, nur zu Stilzwecken zuordnen möchten, verwenden Sie einfach eine CSS-Regel :

.parentClass #myElem { /* CSS property set */ }
71
A. Wolff

Sie können die parents -Methode mit dem angegebenen .class - Selektor verwenden und prüfen, ob einer davon damit übereinstimmt:

if ($elem.parents('.left').length != 0) {
    //someone has this class
}
7
Igor Dymov