90

在 HTML5 中,元素可以具有存储在 XML 属性中的任意元数据,其名称data-<p data-myid="123456">. 这也是 SVG 规范的一部分吗?

在实践中,这种技术在很多地方都适用于 SVG 文档。但是我想知道它是否是官方 SVG 规范的一部分,因为该格式足够年轻,浏览器之间仍然存在很多不兼容,尤其是在移动设备中。因此,在提交代码之前,我想知道我是否可以期待未来的浏览器会支持这一点。

我从工作组邮件列表中找到了这条消息,说他们“希望 [他们] 会”支持它。这成为官方了吗?

4

4 回答 4

127

虽然其他答案在技术上是正确的,但它们忽略了 SVG 为data-*. SVG允许包含任何属性和标签,只要它不与现有的冲突(换句话说:您应该使用命名空间)。

要使用此(等效)机制:

  • 使用mydata:id代替data-myid,像这样:<p mydata:id="123456">
  • 确保在 SVG 开始标记中定义命名空间,如下所示:<svg xmlns:mydata="http://www.myexample.com/whatever">

编辑: SVG2,目前是 W3C 候选推荐(2018 年 10 月 4 日),将直接支持data-(没有命名空间,与 HTML 相同)。不过,要获得广泛的支持还需要一些时间。感谢@cvrebert指出这一点

于 2013-11-28T11:32:36.733 回答
30

data-*属性是 HTML5 的一部分。它不是通用的 XML 属性。

当前的 SVG W3C 建议是SVG 1.1(从 2011-08 开始)。它不允许此属性,因为您可以检查属性列表

SVG 2 工作草案(从 2012-08 开始)也是如此更新(2015):似乎它旨在支持SVG 2中的属性(目前仍是工作草案)。data-*

于 2013-03-22T21:42:01.633 回答
18

data-*SVG2 的当前草案正式支持 SVG 元素的属性。看:

于 2015-05-29T01:21:59.333 回答
9

有一个更通用的机制。

svg 支持desc可能包含来自其他命名空间的任意 xml 的元素。通过依赖 id 或 refid 属性从您自己的命名空间中链接此元素或子节点的实例。

这是规范 (5.4) 的相关部分

于 2013-03-22T11:46:58.743 回答