Alexey Lebedevs Antwort hat bei mir nicht funktioniert, weil Node.contains
ist umfassend.
Wenn die übergeordnetes Element sollte sich von seinem möglichen Nachkommen unterscheiden -das war mein Anwendungsfall-, dann brauchen wir eine etwas andere Lösung: Wir könnten die Node.contains
an die direkten Nachkommen des Elternteils unter Verwendung der Element.children
Eigentum:
const sapiens = document.querySelector("#homo-sapiens")
const isSapiensAnAustralopithecusDescendant = [
...document.querySelector("#australopithecus").children
].some(child => child?.contains(sapiens))
console.log(isSapiensAnAustralopithecusDescendant) // true
<div id="australopithecus">
<div id="homo-erectus">
<div id="homo-neanderthalensis"></div>
<div id="homo-sapiens"></div>
</div>
</div>
Auf diese Weise, Node.contains
vergleicht den möglichen Nachkommen mit dem angegebenen Kind und dessen Kindern.
Eine andere Lösung könnte die Element.closest
Methode. Wenn Sie diese Methode verwenden, sollten Sie jedoch bedenken, dass sollten Sie es bei dem möglichen Nachkommen aufrufen porque Element.closest
sagt uns, wer der Vorfahre eines Elements ist .
Außerdem ist die Funktion inklusiv; wenn Sie also document.body.closest("body")
wird das Ergebnis sein document.body
. Element.closest
gibt das nächstgelegene Element mit dem angegebenen Selektor oder null
.
Wenn Ihr Anwendungsfall erfordert, dass Elternteil und möglicher Nachkomme unterschiedlich sind, dann könnten wir anwenden Element.closest
an den Elternteil des möglichen Nachkommens:
const sapiens = document.querySelector("#homo-sapiens");
const isAustralopithecusAnAncestorOfSapiens = sapiens.parentElement.closest("#australopithecus")
console.log(isAustralopithecusAnAncestorOfSapiens != null) // true
<div id="australopithecus">
<div id="homo-erectus">
<div id="homo-neanderthalensis"></div>
<div id="homo-sapiens"></div>
</div>
</div>