假设我使用的是 selection.data() API 文档中示例代码的略微修改版本,
var matrix = [
[11975, 5871, 8916, 2868],
[ 1951, 10048, 2060, 6171],
[ 8010, 16145, 8090, 8045],
[ 1013, 990, 940, 6907]
];
var tr = d3.select("body").append("table").selectAll("tr")
.data(matrix, function(d) { return d[0]; })
.enter().append("tr");
var td = tr.selectAll("td")
.data(function(d) { return d; })
.enter().append("td")
.text(function(d) { return d; });
在我的矩阵二维数组的后续更新中,我想捕捉(并用......做一些事情)任何变化的表格单元格。例如。
// updated matrix
var matrix2 = [
[11975, 5871, 8916, 2868],
[ 1951, 10048, 2060, 6171],
[ 8010, 16145, 8090, 999999999],
[ 1013, 990, 940, 6907]
];
// bind the new data
var tr = d3.select("table").selectAll("tr")
.data(matrix2, function(d) { return d[0]; });
var cells = tr.selectAll("td")
.data(function(d) { return d; });
var updatedCells = rows.filter(function(d,i) {
// HOWTO get previously bound value for cell???
var prevCellValue = null;
return prevCellValue != d;
} );
在连接产生的更新选择中,有没有办法检索给定选择的先前绑定值?一旦我打电话selection.data(newData)
,似乎我已经丢失了以前绑定的数据。selection.data()
在将新数据绑定到 DOM 元素之前,我可以调用并将输出临时存储到变量中,但是在传递给例如selection.filter()
.
(顺便说一句,我标记了“svg”,因为我的实际示例使用了 SVG 元素,所以我之前this.textContent
在我的selection.filter()
函数中尝试过。不幸的是,this.textContent
已经有了给定单元格的新绑定数据值。)
编辑:this.textContent
“排序”具有先前绑定的数据,但它可能已被处理。如果可能的话,我更喜欢原始的、未更改的数据。