如何删除属性节点影响DOM4中的NamedNodeMap属性?

时间:2016-07-03 19:42:15

标签: javascript dom attributes nodes language-lawyer

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返回的attributes不再被定义为包含属性,其方法仅在过时的规范中定义,并且应该返回节点,但属性不再节点

所以,哇。在这一点上,我不知道attributes应该如何运作。

它仍然应该工作吗?如果是这样,怎么样?如果没有,为什么不删除?

1 个答案:

答案 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仍然有用。