Предположим, я использую слегка модифицированную версию example code from the selection.data() API docs,Получить ранее ограниченные данные
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; });
На последующем обновлении моей матрицы 2d массива, я хочу, чтобы поймать (и делать что-то с ...) любая ячейка таблицы, которая изменяется. Например.
// 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, но кажется неудобным (особенно для этого примера 2D-массива) индексировать ранее привязанные данные в анонимной функции, переданные, например, selection.filter()
.
(Кстати, я помеченный «SVG», потому что мой фактический пример использует SVG элементы, так что я уже пытался this.textContent
в моем selection.filter()
функции. К сожалению, this.textContent
уже вновь связанное значение данных для данной ячейки.)
EDIT: this.textContent
«сорт» имеет ранее привязанные данные, но он потенциально обрабатывается. Я бы предпочел, если возможно, необработанные, неизменные данные.
Я могу предложить использовать [настраиваемые атрибуты данных] (http://html5doctor.com/html5-custom-data-attributes) для их хранения. –