选择.调用是否真的返回 d3 中的选择
Does selection.call really return the selection in d3?
根据文档,selection.call()
返回当前选择,但是当我测试它时,我看到了不同的行为。
代码:
var nodeEnter = node.enter().append("g")
.attr("class", "node")
.on("click", click)
.call(force.drag);
nodeEnter.append("circle")
.attr("r", function(d) { return Math.sqrt(d.size) / 10 || 4.5; });
应与以下内容相同:
var nodeEnter = node.enter().append("g")
.attr("class", "node")
.on("click", click)
.call(force.drag)
.append("circle")
.attr("r", function(d) { return Math.sqrt(d.size) / 10 || 4.5; });
但我看到了不同的行为。这是小提琴。请参阅第 57 - 61 行。使用第二种形式时,节点中的文本消失。
来自 d3 源...
d3_selectionPrototype.call = function(callback) {
var args = d3_array(arguments);
callback.apply(args[0] = this, args);
return this;
};
d3_selectionPrototype
被塞在每个选择的__proto__
上,所以选择this
。
你可以追踪它...
d3.select = function(node) {
var group;
if (typeof node === "string") {
group = [d3_select(node, d3_document)];
group.parentNode = d3_document.documentElement;
} else {
group = [node];
group.parentNode = d3_documentElement(node);
}
return d3_selection([group]);
}
。
function d3_selection(groups) {
d3_subclass(groups, d3_selectionPrototype);
return groups;
}
。
var d3_subclass = {}.__proto__?
// Until ECMAScript supports array subclassing, prototype injection works well.
function(object, prototype) {
object.__proto__ = prototype;
}:
// And if your browser doesn't support __proto__, we'll use direct extension.
function(object, prototype) {
for (var property in prototype) object[property] = prototype[property];
};
相关文章:
- d3基于用户选择动态更新节点
- jQuery的等价物's'不是'D3.js中的选择器
- D3选择html——传递函数时,索引从1开始,而不是从0开始
- D3:从不同的图表中选择特定的节点
- 使用 D3 选择圆的子集
- 从 d3.js 中的树中选择节点的子节点
- 在 Javascript 或 D3 中选择多个属性
- d3.选择不追加
- 通过在d3中单击来选择/取消选择
- d3在鼠标悬停上过滤数据之后从选择中提取值
- 需要D3中条形图上关于年份和犯罪人数变量选择的帮助
- d3.按属性值选择
- 如何在d3中对形状选择进行排序
- 如何从数据中选择d3.js中的唯一值
- 按属性选择d3.js数据元素
- 自动或随机散点图矩阵选择d3.js
- 选择d3图表的一部分
- 将数据从父选择传播到子选择(D3)
- 在(this)之后选择d3中的元素
- 根据其基准选择d3节点