Правильный способ получить значение атрибута объявления пространства имен - PullRequest
7 голосов
/ 19 февраля 2011

Рассмотрим этот SVG / XML и JavaScript:

<svg id="foo" xmlns="http://www.w3.org/2000/svg"
              xmlns:xlink="http://www.w3.org/1999/xlink">
  <use id="bar" xlink:href="#whee" />
</svg>
...
var foo  = document.getElementById('foo');
var bar  = document.getElementById('bar');
var xlnk = foo...; // What is correct here?
var link = bar.getAttributeNS(xlnk,'href');

Очевидно, я могу сделать эту работу с xlnk = "http://www.w3.org/1999/xlink"; Мой вопрос, однако, заключается в том, как правильно выбрать атрибут xmlns:xlink для элемента svg?

Следующий код работает в Safari / Chrome / FF, но действительно ли он действителен?
var xlnk = foo.getAttribute('xmlns:xlink');

Следующий код возвращает пустую строку в этих браузерах:
var xlnk = foo.getAttributeNS( "http://www.w3.org/2000/svg", "xlink" );

1 Ответ

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

Спецификация getAttributeNS() документирует второй параметр как:

" локальное имя атрибута для извлечения."

Per Пространства имен в XML, 3-е издание Префикс xmlns зарезервирован и используется как часть PrefixedAttName для определения NSAttName .

Поскольку NSAttName не имеет "локальной части", а QName имеет - кажется, что xmlns:xlink не считается пространством имен + локальным именем, а скорее атрибутом Назови себя. Поскольку это согласуется с результатами экспериментов в браузерах, которые обычно соответствуют стандартам, я убежден, что следующий код является действительным и правильным:

var xlnk = foo.getAttribute('xmlns:xlink');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...