Почему интерфейс XMLElement не является частью веб-API?

avatar
JerryT
9 августа 2021 в 01:53
71
1
-2

In MDN Web APIs Specifications, there are HTMLDocument, XMLDocument, HTMLElement interfaces. Поэтому я также ожидал увидеть интерфейс XMLElement.

Однако интерфейс XMLElement не был виден. Поэтому я сделал этот запрос, чтобы узнать, почему шаблон остановился.

Источник
somethinghere
9 августа 2021 в 03:10
1

При беглом взгляде на спецификацию разница только в том, как они интерпретируют/применяют элементы в этих документах, но фактические API и интерфейсы кажутся точно такими же, поэтому кажется, что это не более чем маркер, сообщающий браузеру, что использовать. Кроме того, MDN для XMLDocument является старым, коротким и упоминает: «Он наследуется от общего документа и не добавляет к нему никаких конкретных методов или свойств: тем не менее, некоторые алгоритмы ведут себя по-разному с двумя типами документов».

Ответы (1)

avatar
Kaiido
9 августа 2021 в 05:37
0

Какого поведения вы ожидаете от интерфейса XMLElement?

Мы создаем новые интерфейсы только для тех элементов, которые требуют определенного поведения, а простые элементы XML не имеют таковых, они полностью покрываются интерфейсом Element.

Относительно вашего вопроса о setAttribute, в HTML метод будет смотреть на пространство имен, в котором был определен элемент, и документ, которому он принадлежит.

Например, вы можете иметь иностранные элементы, такие как SVG, в HTML-документе, атрибуты которого не будут иметь нижний регистр.

const svg = document.querySelector("svg");
svg.setAttribute("viewBox", "0 0 1 1");

console.log("is HTMLDocument", document instanceof HTMLDocument);
console.log("has lower case attribute 'viewbox'", svg.hasAttribute("viewbox"));
console.log("has camel case attribute 'viewBox'", svg.hasAttribute("viewBox"));
<svg></svg>

Обратите внимание, что поскольку этот элемент <svg> требует особого поведения, он имеет свой собственный интерфейс SVGSVGElement.

Или вы можете иметь HTMLElements в XMLDocument, где он также не будет переводиться в нижний регистр:

const XML_Doc = document.implementation.createDocument(null, "");
const HTML_elem = document.createElement("div");
XML_Doc.append(HTML_elem);
HTML_elem.setAttribute("myAttribute", "");

console.log("is XMLDocument", XML_Doc instanceof XMLDocument);
console.log("is HTMLElement", HTML_elem instanceof HTMLElement);
console.log("has lower case attribute 'myattribute'", HTML_elem.hasAttribute("myattribute"));
console.log("has camel case attribute 'myAttribute'", HTML_elem.hasAttribute("myAttribute"));

Другой интерфейс здесь не поможет.

Также обратите внимание, что интерфейс XMLDocument существует, потому что он используется для того, чтобы иметь некоторые уникальные методы/свойства. Это больше не так, но полное удаление интерфейса может быть небезопасным для Интернета, возможно, некоторые веб-сайты зависят от него.