3 回答

TA贡献1806条经验 获得超5个赞
parentElement 是Firefox 9和DOM4的新功能,但是它已经存在于所有其他主流浏览器中已有很长时间了。
在大多数情况下,它与相同parentNode。唯一的区别是节点parentNode不是元素时。如果是,parentElement则为null。
举个例子:
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
由于<html>元素(document.documentElement)没有作为元素的父元素,因此parentElement为null。(还有其他更不可能的情况,parentElement可能是null,但您可能永远不会遇到它们。)

TA贡献1829条经验 获得超9个赞
使用.parentElement,只要不使用文档片段,就不会出错。
如果使用文档片段,则需要.parentNode:
let div = document.createDocumentFragment().appendChild(document.createElement('div'));
div.parentElement // null
div.parentNode // document fragment
也:
let div = document.getElementById('t').content.firstChild
div.parentElement // null
div.parentNode // document fragment
<template id="t"><div></div></template>
显然,该文档<html>
的.parentNode
链接。由于文档不是节点,因此应将其视为决策重点,因为节点被定义为可包含在文档中,而文档不能包含在文档中。
添加回答
举报