2016-07-03 1 views
0

DOM4 удалены узлы атрибутов. Attr больше не наследует от Node и поэтому полностью изменен. Element методы, которые извлекали или устанавливали узлы атрибутов.Как удаление узлов атрибутов влияет на атрибуты NamedNodeMap в DOM4?

И attributes был удален с Node по Element. Теперь его определяется следующим образом:

interface Element : Node { 
    [SameObject] readonly attribute NamedNodeMap attributes ; 
    ... 
};

Атрибут attributes должен возвращать NamedNodeMap.

Но NamedNodeMap не определяется DOM4! Вместо этого, ссылки на 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

[Кажется, я не единственный, кто это заметил) (https://github.com/w3c/dom/issues/4) – Oriol

ответ

0

Кажется, W3C спецификации is wrong:

Вы не должны читать эту спецификацию, потому что это старый снимок https://dom.spec.whatwg.org/ и содержит массу пробелов.

WHATWG spec определяет его надлежащим образом.

Elements также имеют упорядоченное attribute list экспонируют через NamedNodeMap. Если явно не указано, когда создан element, то attribute list пуст. A elementhas a attribute A, если 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 все еще должен работать.