DOM4删除了属性节点。 Attr
不再继承Node
,因此完全改变了。检索或设置属性节点的Element
方法已被删除。
attributes
已从Node
移至Element
。现在定义如下:
interface Element : Node { [SameObject] readonly attribute NamedNodeMap attributes; ... };
attributes属性必须返回
NamedNodeMap
。
但是{4}没有定义NamedNodeMap
!相反,它链接到DOM Level 3 Core,它说它的方法应该返回节点:
interface NamedNodeMap { Node getNamedItem(in DOMString name); Node setNamedItem(in Node arg) raises(DOMException); Node removeNamedItem(in DOMString name) raises(DOMException); Node item(in unsigned long index); readonly attribute unsigned long length; // Introduced in DOM Level 2: Node getNamedItemNS(in DOMString namespaceURI, in DOMString localName) raises(DOMException); // Introduced in DOM Level 2: Node setNamedItemNS(in Node arg) raises(DOMException); // Introduced in DOM Level 2: Node removeNamedItemNS(in DOMString namespaceURI, in DOMString localName) raises(DOMException); };
此外,在DOM3中,NamedNodeMap
是一种通用数据结构,可用于除属性之外的其他内容。如果attributes
有效,那是因为它被定义为:
类型为
NamedNodeMap
的属性,只读
包含此节点属性的NamedNodeMap(如果是Element)或
null
。
基本上,现在NamedNodeMap
返回的attributes
不再被定义为包含属性,其方法仅在过时的规范中定义,并且应该返回节点,但属性不再节点
所以,哇。在这一点上,我不知道attributes
应该如何运作。
它仍然应该工作吗?如果是这样,怎么样?如果没有,为什么不删除?
答案 0 :(得分:0)
似乎是W3C规范is wrong:
你不应该阅读这个规范,因为它是旧的快照 https://dom.spec.whatwg.org/并且包含大量空白。
WHATWG spec正确定义了它。
Elements也有一个有序attribute list透露 一个
NamedNodeMap
。除非在element时明确给出 创建后,其attribute list为空。一个element has一个 attribute如果A位于attribute list。
NamedNodeMap
已在该规范中正确定义,其方法现在返回Attr
个对象:
[Exposed=Window, LegacyUnenumerableNamedProperties] interface NamedNodeMap { readonly attribute unsigned long length; getter Attr? item(unsigned long index); getter Attr? getNamedItem(DOMString qualifiedName); Attr? getNamedItemNS(DOMString? namespace, DOMString localName); [CEReactions] Attr? setNamedItem(Attr attr); [CEReactions] Attr? setNamedItemNS(Attr attr); [CEReactions] Attr removeNamedItem(DOMString qualifiedName); [CEReactions] Attr removeNamedItemNS(DOMString? namespace, DOMString localName); };
然后,将attributes
定义为
attributes属性必须返回关联的属性
NamedNodeMap
是的,attributes
仍然有用。