HTML 5.1规范在文档IDL中定义奇异属性。
getter object (DOMString name);
这不是打字错误,我不知道怎么用
Document
接口的WebIDL定义的那一部分指定它有一个命名的属性getter。它只有在与HTML规范中定义Document
接口支持的属性名的部分结合时才有意义。
它们一起指定了一些作为Document
的命名属性公开的东西。
考虑以下文档:
<!doctype html>
<form name=foo></form>
<form name=bar></form>
<iframe name=bar></iframe>
<p id=baz>
如果您调用document.foo
,您将返回单个元素,即form name=foo
元素。
如果你调用document.bar
,你将返回一个包含form name=bar
元素和iframe name=bar
元素的集合。
如果你调用document.baz
,你会得到undefined
。
所有这些行为的原因是,定义Document
接口支持的属性名称的HTML规范部分指定form[name]
值和iframe[name]
值可以作为Document
的命名属性访问
该规范还规定,如果Document
命名属性只匹配一个元素,则返回该元素,但如果它匹配多个元素,则返回一个集合。
document.baz
返回undefined
的原因是因为规范部分没有指定p[id]
的值可以作为Document
的命名属性访问。
但是,如果您执行window.baz
,则将返回p id=baz
元素。
造成这种差异的原因是:虽然Window
的WebIDL定义指定它具有命名属性getter(就像Document
WebIDL所做的那样),但定义Window
支持的属性名称的部分-与Document
的类似部分不同- 指定p[id]
值(实际上是任何元素的id
值)作为Window
的命名属性可访问。