javascript - d3 使用 exit 删除数据

标签 javascript d3.js

我准备了一个 fiddle 来说明这个问题here

我在使用 d3 的退出函数从 dom 中删除元素时遇到问题。

假设我有一个包含 10 个元素的数组:

var data = [1 ,4, 5, 6, 24, 8, 12, 1, 1, 20]

我使用此数据使用 d3 创建一个简单的水平条形图

d3.selectAll('rect') 
.data(data) 
.enter() 
.attr("class", "rectangle")
.attr("stroke", "black")
.attr("stroke-width","1px")
.attr("fill","none")
.attr("x", 0)
.attr("y", function(d, i) { return 25 * i; } )
.attr("width", function(d) { return 22 * d; } )
.attr("height", "20");

现在,经过短暂的延迟后,我想 trim 我的数据集,这样我剩下的就是

var truncatedData = [4,5]

d3.selectAll('rect')
    .data(truncatedData )   
    .exit()
    .transition()
    .delay(3000)
    .remove();

数据已成功移除,但仍显示前两个元素 1,4 而不是 4,5。

如何从 dom 中删除除 [4,5] 以外的所有内容?

最佳答案

默认情况下,d3 通过索引而不是值匹配提供给 .data() 的元素。也就是说,在第二次调用中给它一个双元素数组意味着保留第一次调用的前两个元素(索引 0 和 1)。

要在您的案例中解决此问题,请提供一个函数以将元素匹配到对 .data() 的第二次调用,即

.data([5, 6], function(d) { return(d); })

修复了 jsfiddle here .

关于javascript - d3 使用 exit 删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15230574/

相关文章:

javascript - 将最大字符长度放在 Angular 表达式上并添加省略号

javascript - 按顺序而不是一起过渡面板 (D3)

javascript - d3 图表正在显示,但在轴上显示时值关闭

javascript - SvgAnimatedString 缺少方法 indexOf

javascript - 从 html 中的另一个 javascript 调用函数

javascript - 使用 Typescript 在 React JS 中禁用文本框

javascript - 如何在 JavaScript 中打印出对象的所有属性以及分配给它们的值?

javascript - 如何在 Sencha Touch datepickerfield 中引用 "Done"按钮

javascript - 用D3绘制简单的时间线

javascript - 在圆弧中放置点