D3.js - " svg:" in" svg:rect"必须的?

时间:2014-09-02 10:15:44

标签: javascript svg d3.js

例如:

svg.append("svg:rect");
  1. 如果我放弃" svg:"?它似乎没有" svg:"。放弃任何潜在的问题?
  2. 是" svg:"一个特定的d3或svg通常需要它 使用了元素?

2 个答案:

答案 0 :(得分:3)

来自d3.js append() documentation

  

可以将名称指定为常量字符串,也可以将其指定为返回要追加的DOM元素的函数。当名称指定为字符串时,它可能具有“namespace:tag”形式的名称空间前缀。例如,“svg:text”将在SVG名称空间中创建“text”元素。默认情况下,D3支持svg,xhtml,xlink,xml和xmlns命名空间。可以通过添加到d3.ns.prefix来注册其他名称空间。 如果未指定命名空间,则命名空间将从封闭元素继承;或者,如果名称是已知前缀之一,则将使用相应的命名空间(例如,“svg”表示“svg:svg”)。

因此,this提交后,命名空间(在大多数情况下)是可选的。

答案 1 :(得分:1)

svg:部分指定要用于元素的命名空间。特别是,svg:rect表示应在SVG名称空间中解释rect。这是相关的,因为并非所有名称空间中都存在所有类型的元素(例如,HTML没有rect s。)

由于命名空间是从上下文派生的,因此通常不需要在最新版本的D3中明确指定。在某些情况下,您需要指定它以正确解释文档。一个值得注意的例子是在SVG中使用foreignObject时,允许您嵌入非SVG内容,请参阅this example。这里有必要指定xhtml作为附加body元素的命名空间,因为上下文是SVG并且它将被错误地解释。