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