0
5つのオブジェクトを持つデータセットがあります。それぞれのオブジェクトのSVGを作成しています。なぜなら、それぞれのオブジェクトの進行完了サークルを描画しているので、SVGキャンバスが必要なためです。テキスト要素をデータにバインドできるようにする必要がありますが、各オブジェクトに5つのテキスト要素を作成するのではなく、1つのテキスト要素を作成し、適切なインデックスを返すようにテキストフィールドを設定します。D3.js複数のデータ項目のデータセットにバインドされた要素を1つだけ作成する方法
D3はオブジェクトごとに1つの要素を描画するのではなく、どのようにして1つの要素しか描画しません(ただし、データにバインドされます)。コードは以下の通りです:
// Create svg for every data item
var svg = slideContainer.selectAll("svg").data(data);
svg.enter()
.append("svg")
.attr({
"data-id": function (d, i) { return i; },
"class": svgClass
});
svg.exit().remove();
var text = svg.selectAll("text").data(data, function (d) { return d.Margin; });
text.enter()
.append("text")
.attr({
"data-id": function (d, i) { return i; }
})
.text(function (d) {
return data[$(this).attr("data-id")].Margin;
});
text.exit().remove();
text.transition().duration(750)
.attr({
"x": 100,
"y": 100,
"fill": "white",
"class": function (d) {
if ($(this).attr("data-id") != $(this).parent().attr("data-id")) {
return "hide";
}
},
"id": "text"
})
.text(function (d) {
return d.Margin;
});
D3は、要素を追加することによって動作しますあなたが持っている各データ要素にしたがって、複数のデータ要素がある場合、D3は複数のテキスト要素を作成します。あなたが何をしたいのかはっきりしていませんが、テキストを追加する前に、ただ1つのテキスト要素に '[1]'を渡したい場合は、 – thatOneGuy
@thatOneGuyはインデックスを指定していますか? – James
それは、ちょうどあなたに値 '1'のデータの1つを言っていることをしないでください。あなたは何をしようとしていますか? – thatOneGuy