723 Stimmen

Unterschied zwischen DOM parentNode und parentElement

Kann mir jemand in einfachen Worten erklären, was der Unterschied zwischen dem klassischen DOM parentNode und neu eingeführt in Firefox 9 parentElement

706voto

lonesomeday Punkte 224087

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.)

125voto

speedplane Punkte 14917

Im Internet Explorer, parentElement ist für SVG-Elemente undefiniert, während parentNode definiert ist.

33voto

Pacerier Punkte 80774

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.

12voto

Buksy Punkte 10646

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

1voto

mathheadinclouds Punkte 3117

Es gibt noch einen weiteren Unterschied, aber nur im Internet Explorer. Er tritt auf, wenn Sie HTML und SVG mischen. Wenn das übergeordnete Element das "andere" der beiden ist, dann gibt .parentNode das übergeordnete Element an, während .parentElement undefiniert ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X