Ich versuche, das nächstgelegene Element mit einem bestimmten Tag-Namen ohne jquery zu finden. Wenn ich auf ein <th>
klicke, möchte ich Zugriff auf das <tbody>
für diese Tabelle erhalten. Vorschläge? Ich habe über Offset gelesen, aber nicht wirklich verstanden. Soll ich nur verwenden:
Angenommen, th ist bereits auf das angeklickte Element eingestellt
th.offsetParent.getElementsByTagName('tbody')[0]
javascript
hunterc
quelle
quelle
parentNode
: developer.mozilla.org/en-US/docs/Web/API/Node.parentNodeel.closest('tbody')
für Nicht-Browser. Weitere Informationen zu Antworten + Polyfill finden Sie weiter unten.Antworten:
Wenig (sehr) spät zur Party, aber trotzdem. Dies sollte den Trick tun :
quelle
el
die jQuery.closest () und auch Element.closest () ausführen.for( var parent = el ; parent !== null && !parent[matchesFn](selector) ; parent = el.parentElement ){ el = parent; } return parent;
parent
im globalen Bereich (!) Definiertel.parentNode
oder dies wird beim Durchlaufen einer SVG im IE unterbrochen.Sehr einfach:
Wird von allen Browsern außer IE unterstützt.
UPDATE : Edge unterstützt es jetzt auch.
Keine Notwendigkeit für jQuery. Wenn Sie jQuery's
$(this).closest('tbody')
durch ersetzen,$(this.closest('tbody'))
wird die Leistung erheblich gesteigert, wenn das Element nicht gefunden wird.Polyfill für IE:
Beachten Sie, dass es keine gibt,
return
wenn das Element nicht gefunden wurde, und effektiv zurückkehrt,undefined
wenn das nächstgelegene Element nicht gefunden wurde.Weitere Informationen finden Sie unter: https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
quelle
So erhalten Sie das nächstgelegene Element anhand des Tag-Namens ohne jQuery:
quelle
Hierzu gibt es eine standardisierte Funktion: Element.closest . Die meisten Browser außer IE11 unterstützen dies ( Details von caniuse.com ). Die MDN-Dokumente auch eine Polyfüllung, falls Sie auf ältere Browser abzielen müssen.
Um den nächsten
tbody
Elternteil zu finden, könnenth
Sie Folgendes tun:Für den Fall, dass Sie die Funktion selbst schreiben möchten - hier ist, was ich mir ausgedacht habe:
Um das nächstgelegene übergeordnete Element anhand des Tag-Namens zu finden, können Sie es folgendermaßen verwenden:
quelle
Diese Lösung verwendet einige der neueren Funktionen der HTML 5-Spezifikation. Für die Verwendung dieser Funktion in älteren / inkompatiblen Browsern (sprich: Internet Explorer) ist eine Polyfüllung erforderlich.
quelle
Um die @ SalmanPK-Antwort zu erweitern
Sie können den Knoten als Selektor verwenden, was nützlich ist, wenn Sie mit Ereignissen wie Mouseover arbeiten.
quelle
Hier ist die einfache Funktion, die ich benutze: -
quelle
Zusammenfassung:
Um einen bestimmten Vorfahren zu finden, können wir verwenden:
Element.closest();
Diese Funktion verwendet eine CSS-Auswahlzeichenfolge als Argument. Anschließend wird der nächste Vorfahr des aktuellen Elements (oder des Elements selbst) zurückgegeben, der dem CSS-Selektor entspricht, der in den Argumenten übergeben wurde. Wenn es keinen Vorfahren gibt, wird er zurückkehren
null
.Beispiel:
quelle
Holen Sie sich das nächstgelegene DOM-Element in den Baum, das eine Klasse, ID, ein Datenattribut oder ein Tag enthält. Beinhaltet das Element selbst. Zurück zu IE6 unterstützt.
quelle
firstChar
statt allerIF
Bedingungen verwenden?for
Schleife verwenden?Finden Sie die nächstgelegenen Elemente childNodes.
}}
quelle
Hier.
Findet nur Geschwister weiter unten im Baum. Verwenden Sie previousSibling , um den anderen Weg zu gehen, oder verwenden Sie Variablen, um beide Wege zu durchlaufen und den zuerst gefundenen zurückzugeben. Sie haben eine allgemeine Vorstellung davon, aber wenn Sie Elternknoten oder Kinder durchlaufen möchten, wenn ein Geschwister nicht übereinstimmt, können Sie auch jQuery verwenden. An diesem Punkt lohnt es sich leicht.
quelle
Ein bisschen zu spät zur Party, aber als ich vorbeikam und nur eine sehr ähnliche Frage beantwortete, lasse ich hier meine Lösung fallen - wir können sagen, es ist die JQuery
closest()
Ansatz, aber in einfach gutem alten JavaScript.Es benötigt keine Pollyfills und es sind ältere Browser und IE (:-)) freundlich: https://stackoverflow.com/a/48726873/2816279
quelle
Ich denke, der einfachste Code, den man mit jquery am nächsten fangen kann:
Vielen Dank.
quelle