Kann mir jemand in einfachen Worten erklären, was der Unterschied zwischen dem klassischen DOM parentNode und neu eingeführt in Firefox 9 parentElement
Antworten
Zu viele Anzeigen?parentElement
ist neu in Firefox 9 und in DOM4, aber in allen anderen großen Browsern ist es schon seit langem vorhanden.
In den meisten Fällen ist es dasselbe wie parentNode
. Der einzige Unterschied besteht darin, dass ein Knoten parentNode
ist kein Element. Wenn ja, parentElement
es null
.
Ein Beispiel:
document.body.parentNode; // the <html> element
document.body.parentElement; // the <html> element
document.documentElement.parentNode; // the document node
document.documentElement.parentElement; // null
(document.documentElement.parentNode === document); // true
(document.documentElement.parentElement === document); // false
Da die <html>
Element ( document.documentElement
) hat kein übergeordnetes Element, das ein Element ist, parentElement
es null
. (Es gibt andere, eher unwahrscheinliche Fälle, in denen parentElement
sein könnte null
aber Sie werden sie wahrscheinlich nie zu Gesicht bekommen.)
Verwenden Sie .parentElement
und Sie können nichts falsch machen, solange Sie keine Dokumentfragmente verwenden.
Wenn Sie Dokumentfragmente verwenden, dann benötigen Sie .parentNode
:
let div = document.createDocumentFragment().appendChild(document.createElement('div'));
div.parentElement // null
div.parentNode // document fragment
Auch:
let div = document.getElementById('t').content.firstChild
console.log(div.parentElement) // null
console.log(div.parentNode) // document fragment
<template id="t"><div></div></template>
Offensichtlich ist die <html>
's .parentNode
Links zu den Dokument . Dies sollte als Entscheidungshilfe betrachtet werden, da Dokumente keine Knoten sind, da Knoten definiert sind durch Dokumente eindämmbar sein und Dokumente können nicht durch Dokumente eingedämmt werden.
Genau wie bei nextSibling und nextElementSibling Denken Sie daran, dass Eigenschaften mit "Element" in ihrem Namen immer den Wert Element
o null
. Eigenschaften ohne können jede andere Art von Knoten zurückgeben.
console.log(document.body.parentElement, "is body's parent element");//<html>
console.log(document.body.parentNode, "is body's parent node"); //<html>
var html = document.body.parentElement;
console.log(html.parentElement, "is html's parent element"); //null
console.log(html.parentNode, "is html's parent node"); //document