为什么不能像document.body一样通过标签名称选择元素对象?

时间:2017-07-27 17:52:39

标签: javascript html dom

对某些人来说这可能是一个愚蠢的问题,但我很想知道,为什么document.body无效但document.body.getElementById('mypara')无效,而不是document.body

tagName: body我们通过document.body.p引用正文,为什么Settings.Default无效。

由于

3 个答案:

答案 0 :(得分:5)

因为保证文档中只有一个主体(至少理想情况下)。执行document.body.p时,无法保证文档中只有一个p元素。如果有多个p,应该返回哪个p元素?没错。

评论中的问题:

但是你也只有一个html元素(理想情况下)但是没有document.html。右??

是的,有。

Document.documentElement 
  

返回作为文档直接子元素的Element。对于HTML文档,这通常是元素。

https://developer.mozilla.org/en/docs/Web/API/Document

请注意,documentElement是只读的。

答案 1 :(得分:0)

document.body返回对网页的body元素的引用。该元素可以是其他元素的父元素,称为子元素。在这种情况下,第一个子元素是代码通过对子元素应用零索引而读取的段落元素,如下所示:



console.log(document.body.children[0]);
console.log(document.body.children[0].textContent);

<body>
<p>text</p>
&#13;
&#13;
&#13;

如果你想阅读段落的内容,你只需要参考它的&#34; textContent&#34;或&#34; innerText&#34;。

答案 2 :(得分:0)

由于document是一个HTMLDocument对象,其属性列为here,其中一个属性为body,这是HTMLElement的一个实例。您可以在浏览器的控制台中尝试:

  • document instanceof HTMLElement将返回false
  • document instanceof HTMLDocument将返回true
  • document.body instanceof HTMLElement将返回true

现在我们知道documentdocument.body是不同类型的对象。您可以在上面的链接中浏览Mozilla的文档,以查看每种类型对象上可用的属性和方法。例如,getElementById仅适用于document,而getElementsByTagName可用于任何Element对象,例如bodyElement接口是HTMLElement的父级,因此HTMLElement也可以使用Element提供的方法。

如果允许像属性document.body.p那样访问所有标记名,则会出现一个问题,即命名冲突。 document.body.style会返回CSSStyleDeclaration,但如果style被视为您建议的标记名,则必须返回HTMLCollection<style>元素。 (虽然技术上正文中的<style>元素无效,但浏览器仍会解析它。)