我正在玩拖动倍数的例子,我注意到了一些我无法解释的事情.
在这个片段中:
var svg = d3.select("body").selectAll("svg")
.data(d3.range(16).map(function() { return {x: width / 2, y: height / 2}; }))
.enter().append("svg")
.attr("width", width)
.attr("height", height);
Run Code Online (Sandbox Code Playgroud)
我换selectAll了select.它仍然有效,但现在的svg元素将被添加后的</body>标签.原始代码,如您所期望的那样selectAll,将它们添加到<body>标记之后.
由于原来的HTML不包含硬编码的<svg>元素,我认为无论是select和selectAll刚刚返回空选择.所以我无法弄清楚为什么它们导致不同的行为.
我只是在寻找解释.谢谢!
select和selectAll之间的基本区别在于,select会压缩现有选择的层次结构,而selectAll会保留它.
因此,当您在另一个之后使用一个selectAll时,结果将很像嵌套for循环列表.
http://bost.ocks.org/mike/nest/
查看 Mike Bostock 的关于 select/selectAll: Nested Selections的帖子
报价:
select 和 selectAll 之间有一个重要的区别:select 保留现有的分组,而 selectAll 创建一个新的分组。因此,调用 select 会保留原始选择的数据、索引甚至父节点!
| 归档时间: |
|
| 查看次数: |
10919 次 |
| 最近记录: |