Редактировать: Отчасти это неправильно.Подробности см. В комментариях ниже
Все Element
объекты также являются Node
объектами (поскольку Element
является потомком Node
).Но есть Node
, который не является Element
... document
объектом.Таким образом, ваш элемент <html>
имеет родительский узел (document
), но у него нет родительского элемента.
Причина, по которой требуется parentElement
вместо parentNode
, заключается в том, что HTML5Строго не требуется элемент <html>
, поэтому практически любой элемент может иметь родительский узел, не имея родительского элемента.Поэтому, если бы моя HTML-страница выглядела так:
<!doctype html>
<title>My page</title>
<header>This is my page</header>
<div id="body">
<p>This is some text from my page</p>
</div>
<footer>
Copyright, me
</footer>
, тогда элементы title
, header
, #body
и footer
имели бы свои parentNode
как document
, но их parentElement
будет нулевым.Только тег p
будет иметь parentElement
, то есть #body
.(Обратите внимание, что я бы не советовал это как структуру страницы ... придерживайтесь чего-то более традиционного.)
Вы можете повторить это примерно так:
if (myElement.parentNode instanceof Element) {
myElement.parentElement = myElement.parentNode;
} else {
myElement.parentElement = null;
}