2014-05-17 53 views
8

我可以在SVG组之间移动一个SVG元素 - 不需要在幕后进行太多的计算,也不会在我自己的代码中编写太多的代码? d3 api documentation提到你不能重新附加删除的元素(?)。我可以在SVG组之间移动一个SVG元素,在d3.js

从原始组中删除元素后重新创建元素 - 在我的代码中看起来很麻烦,而且对于d3和浏览器来说,如果可能的话,这可能会更加昂贵。

这与在将其与组关联之前定义元素不仅仅是为了在组之间真正地移动它(即用于将元素从非组移动到组)。

回答

1

你不能在D3中这样做,但JQuery有.appendTo() function,例如,

$("#element").appendTo("#otherGroup"); 
+0

谢谢,但我们不使用jQuery,因为我们不需要支持旧浏览器......我不会介绍它。通常,将SVG元素自己移动(例如,分组到一个组)然后在其上调用d3.js是安全的吗? – matanster

+0

当然,唯一要记住的是,你也会移动任何绑定的数据。 –

12

docs you posted还提到,你可以通过一个函数来.append.insert重新添加的元素。这就是它说的:

请注意,目前没有专门的API将删除的元素添加回文档;但是,您可以将一个函数传递给selection.append或selection.insert以重新添加元素。


由于在选择使用.remove返回的选择,你可以删除的元素它使用selection.node()从去除选择抢DOM元素存储在一个变量,然后.append到新组:

var removed = yourSelection.remove(); 
yourTargetGroup.append(function() { 
    return removed.node(); 
}); 

下面是一个简单的Fiddle,它使用这种技术在点击处理程序中将一个圆形元素从一个组移动到另一个组。

+0

这应该被接受为正确的。 – wberry