efw*_*efw 4 javascript dom properties
我刚刚开始学习客户端 JavaScript 并使用在线教程,所以请耐心等待。
这个问题是基于我对以下内容的理解:
要访问文档正文的属性,语法是“document.body”,它返回正文中的所有元素。
类似地,当您访问头部时,您使用“document.head”。有道理,最重要的是,它有效。
但是,当我尝试按照相同的逻辑访问正文或头部内的元素时,我得到“未定义”的返回值。例如,document.body.h1 返回“未定义”,尽管 body 元素内有 h1 元素。
此外,当我输入 document.head.title 时——“未定义”。
然而奇怪的是,当我输入“document.title”时,它返回与标题标签关联的字符串值。
我认为为了访问标题,您必须通过头部访问它,因为它是嵌套在头部内的元素。但好吧,没关系。使用相同的逻辑,我应该能够输入 document.h1 并获取其值。不,相反,我变得不确定。
有人可以向我解释为什么这种行为如此不一致吗?提前致谢。
你确实问了两个问题:
document.title而不是document.head.title?和
document.body.h1返回元素?h1bodydocument.titledocument.title是历史性的。浏览器环境的各个部分是由 20 世纪 90 年代多个不同的人/组织临时开发的。:-) 也就是说,它是文档的标题,因此即使您title在head.
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可能是。0getElementsByTagName- 获取具有给定标签名称(例如"h1")的所有元素的列表。getElementsByClassName- (IE8 及更早版本不支持)获取具有给定类的所有元素的列表。还有更多。有关更多信息,请参阅MDN 的 Web 文档和/或WHAT-WG DOM 标准。
一些自动列表会持续存在(它们的用途如此之多,以至于必须对其进行维护/保留),例如document.forms、document.links、和实例rows上的属性、实例上的属性以及各种其他列表。HTMLTableElementHTMLTableSectionElementcellsHTMLTableRowElement