D3.js - 根据当前基准面追加或插入元素
D3.js - Appending or Inserting an element depending on the current datum
是否可以
在 d3.js 中根据当前基准面追加或插入新元素?
我举了一个例子来展示我想要实现的目标
http://jsfiddle.net/DorjeDuck/uDBau/
基本上,新的红色圆圈总是画在所有蓝色圆圈的顶部,新的蓝色圆圈总是放在所有红色圆圈的下面。
到目前为止,这是通过过滤数据集(javascript 数组过滤器,而不是 d3 过滤器)来实现的。过滤功能:
var selectNewOnesByColor = function (selection, color) {
return selection.data(data.filter(function (d) {
return d.color === color;
}), function (d) {
return d.id;
})
.enter();
}
随后,为一个子集附加圆圈,为另一个子集插入圆圈。虽然这有效,但我想知道是否有更直接的方法来实现这一点。
谢谢
马丁
我认为过滤数据以实现两个不同的输入选择的方法是正确的方法。 这是关于这个主题的一个线程(链接到另外两个有趣的线程):https://groups.google.com/forum/#!msg/d3-js/PKsknGxmZ8g/ULxwneU00J4J。
在其中一个子线程中,有一个示例显示了将selection.select
与返回新附加或插入的节点的函数一起使用。 这实际上是内部实现selection.append
和selection.insert
的方式,因此,如果您真的想将节点创建合并到单个数据绑定传递中,则可以有效地使用它。 该函数将获得当前基准面,并将使用您返回的任何节点作为选择元素中的节点。
但我认为你对预过滤所做的更直接。
相关文章:
- 表追加而不附加最后一个元素
- 如何在jquery中停止在更改时追加值
- JQuery.on(“keydown”)追加到页面时不工作
- 如何计算二十面体的法线
- jQuery[button.class]未检测到用按钮追加行
- 使用jQuery'生成输入字段;s追加
- js”;在“;不按特定顺序追加键/值
- 如何在 ReactJs 中追加到表
- 文本框仅接受十进制值,并且应在十进制后追加2个零
- 角度烤面包机:发送到烤面包机上隐藏的路径
- 为什么DocumentFragment在追加后被清除
- 正在从JQuery追加Laravel Blade
- 有什么方法可以在下一个元素上进行追加吗
- jQuery-根据值在输入字段后追加图像
- jQuery动态使用.append()添加输入,但发布表单不是追加数据
- 追加Jquery后的Binding Click事件不起作用
- 包含数组的对象的QML ListModel追加中断
- JQuery追加到父级,只要它's已创建
- D3.js - 根据当前基准面追加或插入元素
- 使用ES6将对象展平到基准面