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

考虑这个SVG / XMLJavaScript
<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”);

解决方法

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

“The 07001 of the attribute to retrieve.”

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

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

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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...