私は、d3を使用してページにいくつかの新しいdivを配置し、属性を追加し、データ駆動型スタイルを追加する単純なd3の例に取り組んでいます。私をつまずかせているのは、d3を使用して新しいデータを使用していくつかのスタイルを更新したいときです。以下のjsFiddle(http://jsfiddle.net/MzPUg/15/)からコードを貼り付けました。
最初にdivを作成するステップでは、キー関数を使用して要素にインデックスを追加し、更新ステップ(機能していない部分)でもキー関数を使用します。しかし、d3のドキュメントから明らかでないのは、実際のデータ結合がどのように機能するかです(たとえば、インデックスはDOM要素のどこに格納されているのか、重複するインデックスがある場合はどうなるのかなど)。
ですから、私の知識には明らかなギャップがありますが、ここでそれを単純に保つことで、この例が機能しない理由を誰かが明らかにすることができますか?d3でのデータ結合の正確な性質に関する追加情報は、ケーキのフロスティングになります。(私はすでにhttp://bost.ocks.org/mike/join/を見ました。)
//add a container div to the body and add a class
var thediv = d3.select("body").append("div").attr("class","bluediv");
//add six medium-sized divs to the container div
//note that a key index function is provided to the data method here
//where do the resulting index value get stored?
var mediumdivs = thediv.selectAll("div")
.data([10,50,90,130,170,210],function(d){return d})
.enter().append("div")
.style("top",function(d){return d + "px"})
.style("left",function(d){return d + "px"})
.attr("class","meddiv")
//UPDATE STEP - NOT WORKING
//Attempt to update the position of two divs
var newdata = [{newval:30,oldval:10},{newval:80,oldval:50}]
var mediumUpdate = mediumdivs.data(newdata,function(d){return d.oldval})
.style("left",function(d){return d.newval + "px"})