D3 SVG 图表中的现有元素不会更新 - 所有元素都被视为 exit() 和 enter() 集
Existing elements in D3 SVG chart aren't updated - all is regarded as exit() and enter() sets
我正在玩一个图表,图表显示13个g元素,每个元素都有一个圆圈。然后我在控制台中执行以下操作。验证给我的副本包含 13 个元素,短 7 个和长 20 个。当然,屏幕上没有任何变化。
var gees = d3.select("#graph2").selectAll("g");
var copy = gees.data();
var shorty = copy.slice(0,7)
var longy = shorty.concat(copy);
现在,我执行以下内容,我预计数据集会有所不同,但不会像我看到的那样。如果我们从 13 个元素开始并减去 6(就像 shorty 的情况一样(,enter(( 集应该是 0,exit(( 集应该是 6,就像我计算的那样。但是,我的控制台自豪地显示它是 7 和 13。等效地,如果我们从 13 个元素开始并添加 7(就像 longy 的情况一样(,据我所知,enter(( 集应该是 7,exit(( 集应该是 0。再一次,我的控制台让我感到惊讶,声称它是 20 和 13。
gees.data(shorty).enter()
gees.data(shorty).exit()
[阵列[7]]
[阵列[13]]
gees.data(longy).enter()
gees.data(longy).exit()
[阵列[20]]
[阵列[13]]
我得出的结论是,所有 pre-exisint 元素都被丢弃(因此放入 exit(( 集中(,添加的数据被视为一个全新的集合(因此被视为 enter(( 集(。我可以接受这一点,但我读过的所有文章都指出,集合上的每个操作都应该依赖:
- 更新数据(( 中的内容
- 在 enter(( 中追加内容
- 删除 exit(( 中的内容
这些集合的大小正确。你只是没有看尺寸。您被控制台的数据演示所欺骗。运行这些命令应该可以消除混淆。我已经在圆圈而不是gs上这样做了,但它的逻辑相同。
mySet.data(shorterSet).exit().size()
6
mySet.data(shorterSet).enter().size()
0
mySet.data(longerSet).exit().size()
0
mySet.data(longerSet).enter().size()
7
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- D3.js:enter(),update,exit(),中间有组元素
- D3 SVG 图表中的现有元素不会更新 - 所有元素都被视为 exit() 和 enter() 集
- D3.js输入/update/exit没有按预期添加元素