В JS связан с страницей XHTML, я создаю новые элементы, используя createElementNS
, например:В чем разница между createElementNS с префиксом и без него?
const NS = 'http://my.site/xmlns';
const el1 = document.createElementNS(NS, 'custom');
const el2 = document.createElementNS(NS, 'p:custom');
Я не могу понять, в чем разница между элементом созданным с префиксом пространства имен во втором аргументе и созданные без Это. Например, эти правила CSS имеют одинаковый эффект на оба элементов:
@namespace p url('http://my.site/xmlns');
p|custom { background: yellow; }
Далее вызов document.getElementsByTagNameNS(NS, 'custom')
возвращающей HtmlCollection
с как элементов, в то время как document.getElementsByTagNameNS(NS, 'p:custom')
возвращает пустой HtmlCollection
, что кажется мне странным.
Так в чем же разница между созданием элементов с префиксом пространства имен и без него?
Квалифицированное имя (QName) необязательно должно быть квалифицировано с префиксом пространства имен для 'createElementNS()' для работы, если пространство имен, указанное в первом аргументе, было объявлено с префиксом пространства имен ранее в документе. https://developer.mozilla.org/en-US/docs/Web/API/Document/createElementNS –
@Scott Marcus: Ах, но как получилось? Ни спецификация, ни MDN не указывают это явно, поэтому должно быть что-то, чего я не вижу. – BoltClock
Да, я слышу вас, но страница MDN показывает, что она используется без выраженного QName, но с тем же самым пространством имен, которое уже было объявлено (с префиксом) в документе, поэтому представляется, что если вы указываете пространство имен, которое уже объявлен с префиксом, что новый элемент, который вы укажете, будет неявно иметь правильное QName. –