SVG в XHTML5: установка атрибутов с правильным пространством имен - PullRequest
3 голосов
/ 03 февраля 2011

TL; DR Summary : Правильно ли использовать setAttribute вместо setAttributeNS для элементов SVG?

подробности :
Рассмотрим изображение SVG, встроенное в XHTML5, которое использует JavaScript для динамического создания и добавления элементов в чертеж: http://phrogz.net/svg/svg_in_xhtml5.xhtml

Элементы SVG, созданные JavaScript и добавленные к элементу <svg>, должны быть созданы с использованием ...

var el = document.createElementNS("http://www.w3.org/2000/svg",'foo');

... вместо ...

var el = document.createElement('foo');

... для того, чтобы они рассматривались как элементы SVG и отображались в браузере. Это разумно и понятно. Однако, согласно этой странице я должен также установить атрибуты этих элементов, используя ...

el.setAttributeNS( null, 'foo', 'bar' );

... вместо кода, который я сейчас использую:

el.setAttribute( 'foo', 'bar' );

То, что я делаю, работает в Chrome, Safari и Firefox. Это то, что у меня есть юридический код - это эквивалентно рекомендации - или просто случается , чтобы работать из-за разрешающей природы браузеров, и я должен вместо этого использовать setAttributeNS действительный

1 Ответ

5 голосов
/ 03 февраля 2011

Пока вы не используете атрибуты пространства имен (с префиксом или без него), вы можете использовать setAttribute.

Рекомендация setAttributeNS хороша в некотором смысле, потому что тогда вам не нужно беспокоиться оиспользуя разные методы (и когда использовать какой).Вам действительно нужно только setAttributeNS, когда вам нужно изменить, например, xlink: href или пользовательские атрибуты пространства имен.С другой стороны, люди неправильно понимают пространства имен (иногда пытаются использовать, например, пространство имен svg вместо NULL для атрибутов svg), поэтому неясно, что является менее запутанным IMHO.

DOM 2 Core говорит это о методах get / setAttribute DOM Level 1:

Методы DOM Level 1 не знают пространства имен.Поэтому, хотя эти методы безопасны, когда они не имеют дело с пространствами имен, следует избегать их одновременного использования и новых.

Я мог бы добавить, что "одновременно" следуетвозможно, прочитал «одновременно по одному и тому же (предполагаемому) атрибуту» или что-то подобное.

Сам SVG не требует, чтобы ваши скрипты были «легальными», или что-то в этом роде, за исключением самой разметки svg, но для него требуется поддержка определенных спецификаций DOM, таких как DOM 2 Core в случае SVG 1.1.

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