3

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; });

マトリックス 2 次元配列の後続の更新で、変更されたテーブル セルをキャッチ (および何かを実行) したいと考えています。例えば。

// 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指定されたセルに新しくバインドされたデータ値が既にありました。)

EDIT : this.textContent「並べ替え」には以前にバインドされたデータがありますが、処理される可能性があります。可能であれば、生の変更されていないデータを希望します。

4

1 に答える 1