正确获取名称空间声明属性值的方法

时间:2011-02-19 02:15:07

标签: javascript xml namespaces svg

考虑这个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 个答案:

答案 0 :(得分:5)

getAttributeNS()规范将第二个参数记录为:

  

“要检索的属性的local name。”

Namespaces in XML, 3rd Edition xmlns前缀为reserved,并用作PrefixedAttName的一部分来定义NSAttName

由于NSAttName没有“本地部分” - 而QName确实如此 - xmlns:xlink似乎不被视为命名空间+本地名称,而是属性自称。由于这与通常符合标准的浏览器的实验结果一致,我确信以下代码是有效且正确的:

var xlnk = foo.getAttribute('xmlns:xlink');