В чем разница между createElement (...) и createElementNS ('http://www.w3.org/1999/xhtml', ...) - PullRequest
0 голосов
/ 03 апреля 2019

Я не понимаю разницу между createElement (...) и createElementNS ('http://www.w3.org/1999/xhtml', ...)

Вы можете попробовать следующий код:

var element1 = document.createElement('form:form');
var element2 = document.createElementNS('http://www.w3.org/1999/xhtml', 'form:form');

console.log(element1.tagName); // FORM:FORM
console.log(element1.localName); // form:form

console.log(element2.tagName); // FORM:FORM
console.log(element2.localName); // form

Я думал, что это будет тот же результат, но не на всех.Кто-то знает почему?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Пространства имен в разметке помечены синтаксисом namespace:element (или namespace:attribute в этом отношении). Методы DOM createElementNS и setAttributeNS не нуждаются в этом синтаксисе для создания элементов в данном пространстве имен, а потому что синтаксис разметкипозволяет, они все равно распознают и игнорируют его.

Так что при строковом оформлении документа вы можете иметь

<html xmlns:form="http://www.w3.org/1999/xhtml">
  <form:form></form>
</html>

вместо некоторых трудных для чтения

<html xmlns:NS0="http://www.w3.org/1999/xhtml">
  <NS0:form></form>
</html>
Однако методы

createElement и setAttribute не распознают этот синтаксис и действительно создадут элемент <xmlns:form:form></form>.

0 голосов
/ 03 апреля 2019

Разница между createElement и createElementNS заключается в том, что вы можете указать URI пространства имен в createElementNS, тогда как createElement не позволяет этого.

createElementNS можно использовать, когда вам нужно создать SVG из JS. AS SVG нужен URI пространства имен. Вы можете проверить действительные пространства имен здесь: https://developer.mozilla.org/en-US/docs/Web/API/Document/createElementNS#Important_Namespace_URIs

Если вы создаете элемент в HTML, вы можете использовать createElement, так как в нем нет необходимости namespace, но если вы создаете HTML в XHTML, тогда вам нужно использовать createElementNS, так как XHTML нужен namespace с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...