为什么是“document.title”而不是“document.head.title”?RE: 遍历 DOM

efw*_*efw 4 javascript dom properties

我刚刚开始学习客户端 JavaScript 并使用在线教程,所以请耐心等待。

这个问题是基于我对以下内容的理解:

要访问文档正文的属性,语法是“document.body”,它返回正文中的所有元素。

类似地,当您访问头部时,您使用“document.head”。有道理,最重要的是,它有效。

但是,当我尝试按照相同的逻辑访问正文或头部内的元素时,我得到“未定义”的返回值。例如,document.body.h1 返回“未定义”,尽管 body 元素内有 h1 元素。

此外,当我输入 document.head.title 时——“未定义”。

然而奇怪的是,当我输入“document.title”时,它返回与标题标签关联的字符串值。

我认为为了访问标题,您必须通过头部访问它,因为它是嵌套在头部内的元素。但好吧,没关系。使用相同的逻辑,我应该能够输入 document.h1 并获取其值。不,相反,我变得不确定。

有人可以向我解释为什么这种行为如此不一致吗?提前致谢。

T.J*_*der 6

你确实问了两个问题:

  1. 为什么document.title而不是document.head.title

  1. 如果中有 an ,为什么不document.body.h1返回元素?h1body

document.title

document.title是历史性的。浏览器环境的各个部分是由 20 世纪 90 年代多个不同的人/组织临时开发的。:-) 也就是说,它是文档的标题,因此即使您titlehead.

document.body.h1

一个答案是:因为没有人决定这样设计。有一些早期的东西,比如document.all文档中所有元素的列表),甚至是特定于标签的东西(我完全忘记它们是什么,但它们离你的document.body.h1 - 我想document.tags.h1或者什么,又在哪里)一个列表。)

但另一个答案是:因为 DOM 是一棵树。body可以有多个h1元素,既可以作为直接子元素,也可以作为子元素的子元素(或更深层);统称子孙。事实证明,使用所有这些创建自动列表无法扩展到大型文档。

相反,您可以通过多种方法查询DOM(整个文档,或仅特定元素的内容):

  • getElementById- (就在document)使用元素的属性值获取元素id
  • querySelector- 查找与 CSS 选择器匹配的第一个元素(可以在元素上document或元素上使用它)。null如果没有匹配则返回。
  • querySelectorAll- 获取与 CSS 选择器匹配的所有元素的列表document(可以在元素上或元素上使用它)。您可以信赖拿回一份清单;当然,这length可能是。0
  • getElementsByTagName- 获取具有给定标签名称(例如"h1")的所有元素的列表。
  • getElementsByClassName- (IE8 及更早版本不支持)获取具有给定类的所有元素的列表。

还有更多。有关更多信息,请参阅MDN 的 Web 文档和/或WHAT-WG DOM 标准

一些自动列表会持续存在(它们的用途如此之多,以至于必须对其进行维护/保留),例如document.formsdocument.links、和实例rows上的属性、实例上的属性以及各种其他列表。HTMLTableElementHTMLTableSectionElementcellsHTMLTableRowElement