Czy ktoś może mi wyjaśnić tak prosto, jak to możliwe, jaka jest różnica między klasycznym DOM ParentNode a nowo wprowadzonym w Firefox 9 parentElement
Czy ktoś może mi wyjaśnić tak prosto, jak to możliwe, jaka jest różnica między klasycznym DOM ParentNode a nowo wprowadzonym w Firefox 9 parentElement
Odpowiedzi:
parentElement jest nowy w Firefoksie 9 i DOM4, ale był obecny we wszystkich innych głównych przeglądarkach od wieków.
W większości przypadków jest to to samo co parentNode. Jedyna różnica pojawia się, gdy węzeł parentNodenie jest elementem. Jeśli tak, parentElementto jest null.
Jako przykład:
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
Ponieważ <html>element ( document.documentElement) nie ma elementu nadrzędnego, który jest elementem, parentElementjest null. (Są inne, bardziej mało prawdopodobne, przypadki, w których parentElementmogą być null, ale prawdopodobnie nigdy ich nie spotkasz).
parentElementbył zastrzeżoną rzeczą IE; Wierzę, że inne przeglądarki w tym czasie (np. Netscape) były obsługiwane, parentNodeale nie parentElement. (Oczywiście, biorąc pod uwagę, że wspomniałem o Netscape, mówię o drodze powrotnej do IE5 i wcześniejszych ...)
documentfragment.firstChild.parentElement === null
circlewnętrze a g) w IE parentElementbędzie niezdefiniowany i parentNodebędzie tym, czego szukasz. :(
W Internet Explorerze parentElementjest niezdefiniowany dla elementów SVG, natomiast parentNodejest zdefiniowany.
parentElementniewdrożenie Nodejest dobrze znane ( developer.mozilla.org/en-US/docs/Web/API/Node/… ), ale dla SVGElement? Nie mogłem również odtworzyć tego document.createElement('svg').parentElementw IE 11.737.17763.0. Czy w międzyczasie można to naprawić?
Użyj .parentElementi nie możesz się pomylić, dopóki nie korzystasz z fragmentów dokumentu.
Jeśli korzystasz z fragmentów dokumentów, potrzebujesz .parentNode:
let div = document.createDocumentFragment().appendChild(document.createElement('div'));
div.parentElement // null
div.parentNode // document fragment
Również:
let div = document.getElementById('t').content.firstChild
div.parentElement // null
div.parentNode // document fragment
<template id="t"><div></div></template>
Widocznie <html>„s .parentNodelinki do Dokumentu . Należy to uznać za decyzję, ponieważ dokumenty nie są węzłami, ponieważ węzły są zdefiniowane jako zawierające dokumenty i dokumenty nie mogą być zawarte w dokumentach.
Podobnie jak w przypadku nextSibling i nextElementSibling , pamiętaj tylko, że właściwości z „elementem” w nazwie zawsze zwracają Elementlub null. Właściwości bez mogą zwracać dowolny inny rodzaj węzła.
console.log(document.body.parentNode, "is body's parent node"); // returns <html>
console.log(document.body.parentElement, "is body's parent element"); // returns <html>
var html = document.body.parentElement;
console.log(html.parentNode, "is html's parent node"); // returns document
console.log(html.parentElement, "is html's parent element"); // returns null
jest jeszcze jedna różnica, ale tylko w Internet Explorerze. Występuje podczas mieszania HTML i SVG. jeśli rodzic jest „drugim” z tych dwóch, to .parentNode daje rodzicowi, a .parentElement daje niezdefiniowany.
undefinednie null.