【问题标题】:Correct way to get value of namespace declaration attribute获取命名空间声明属性值的正确方法
【发布时间】:2011-06-30 05:21:24
【问题描述】:

考虑一下这个 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" 完成这项工作;但是,我的问题是,在 svg 元素上动态获取 xmlns:xlink 属性的正确方法是什么?

以下代码恰好在 Safari/Chrome/FF 中运行,但它真的有效吗?
var xlnk = foo.getAttribute('xmlns:xlink');

以下代码在这些浏览器中返回一个空字符串:
var xlnk = foo.getAttributeNS( "http://www.w3.org/2000/svg", "xlink" );

【问题讨论】:

    标签: javascript xml namespaces svg


    【解决方案1】:

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

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

    对于Namespaces in XML, 3rd Editionxmlns 前缀是reserved,并用作PrefixedAttName 的一部分来定义NSAttName

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多