创建新选择并提供数据:
var svg = d3.select("body").append("svg");
var _nodeSelection = svg.insert("g").selectAll(".node");
var _nodeData = _nodeSelection.data(_nodes);
_nodeData
.enter().append("text")
.attr("class", "node");
经过一些回调后,所有现有元素的属性都会发生变化,这样可行!
_nodeData.attr("class", "update");
在另一个回调中,我向选择提供新数据,并在调用Enter / Exit例程之前尝试更新现有选择。
// No longer works after supplying new data
var _nodeData = _nodeSelection.data(_nodes);
// Does not work anymore:
_nodeData.attr("class", "update2");
这不再有效,因为在类中没有更新到update2。这对我来说是令人惊讶的,因为根据这个example这应该有效。
因此,在新数据选择上调用.Enter()会在示例位置创建一组新元素作为旧元素,以便复制所有svg元素。
我做错了什么?
答案 0 :(得分:1)
您必须使用selectall
明确重新选择。 D3在提供数据时对选择进行显式内部绑定,并且不能在同一选择上应用两次。