假设我想使用 d3 动态更新页面上圆圈的位置和数量。我可以做到这一点,使用 .data()、.enter()、.exit() 模式。这是一个工作示例。 http://jsfiddle.net/csaid/MFBye/6/
function updatePositions(data) {
var circles = svg.selectAll("circle").data(data);
circles.enter().append("circle");
circles.exit().remove();
circles.attr("r", 6)
.attr("cx", 50)
.attr("cy", function (d) {
return 20 * d
});
}
但是,当我尝试用外部 SVG 而不是圆形做同样的事情时,第一次更新后的许多新数据点不会出现在页面上。示例:http: //jsfiddle.net/csaid/bmdQz/8/
function updatePositions(data) {
var gs = svg.selectAll("g")
.data(data);
gs.enter().append("g");
gs.exit().remove();
gs.attr("transform", function (d, i) {
return "translate(50," + d * 20 + ")";
})
.each(function (d, i) {
var car = this.appendChild(importedNode.cloneNode(true));
d3.select(car).select("path")
});
}
我怀疑这与用于附加外部 SVG 对象的 .each() 有关,但我不知道如何解决这个问题。此外,“cx”和“cy”属性是特定于圆的,所以我想不出它们如何用于外部 SVG。
提前致谢!