我有一个问题。想象一下,我们有这样的HTML文档:
<html>
<head>
</head>
<body>
<p id="1">Hi</p>
</body>
</html>
当我写document.getElementById("1").__proto__;
时 - 我有HTMLParagraphElement对象。它是p对象原型链中的第一个原型对象(HTMLParagraphElement - &gt; HTMLElement - &gt; Element - &gt; Node - &gt; ...)。由于Node对象正在此链中,因此其所有属性和方法都可用于HTMLParagraphElement对象。当我写document.getElementById("1").__proto__.parentNode;
时,浏览器会给我
未捕获的TypeError:非法调用。 这是什么意思?如何知道此HTMLParagraphElement对象与BOM的连接位置?例如,如果我写var x = 10; - 它是一个对象,它连接到窗口对象的根(window.x;)。我想清楚地了解BOM的结构。
答案 0 :(得分:0)
如果需要访问元素的parentNode,则应直接执行:
document.getElementById("1").parentNode
上面的行会返回对<body>
节点的引用,适合遍历DOM。
否则,
document.getElementById("1").__proto__.parentNode
意味着您正在尝试获取类/类型HTMLParagraphElement
的parentNode,它不是元素而是元素类型:元素类型没有parentNodes。
与__proto__
更合适的方法是:
document.getElementById("1").__proto__.__proto__
上面的行会给你HtmlElement
类,虽然这不是很有用。
关于var x
,应该注意的是,javascript中定义的变量没有附加到DOM,全局变量被添加到window
。 window
通过window.document
连接到DOM,只需输入document....
命令即可访问。