TL;DR
D3 の最新バージョンでは、 tmpearceの回答でselection.raise()
説明されているように使用できます。下にスクロールして賛成票を投じてください!
元の答え
オブジェクトの順序を変更し、マウスオーバーした円を最後に追加された要素にする必要があります。ここでわかるように: https://gist.github.com/3922684およびnautatで提案されているように、メイン スクリプトの前に次を定義する必要があります。
d3.selection.prototype.moveToFront = function() {
return this.each(function(){
this.parentNode.appendChild(this);
});
};
次に、マウスオーバーでmoveToFront
オブジェクトの関数を呼び出す必要があります(たとえば、circles
):
circles.on("mouseover",function(){
var sel = d3.select(this);
sel.moveToFront();
});
編集: Henrik Nordbergが示唆しているように、.data()
. これは、要素へのバインディングを失わないようにするために必要です。詳細については、ヘンリックの回答を読んでください(そして賛成してください!)。.data()
一般的なアドバイスとして、 d3 の完全なパフォーマンス機能を活用するために、データを DOM にバインドするときは常に の 2 番目の引数を使用してください。
編集: Clemens Tolboomが
述べたように、逆関数は次のようになります。
d3.selection.prototype.moveToBack = function() {
return this.each(function() {
var firstChild = this.parentNode.firstChild;
if (firstChild) {
this.parentNode.insertBefore(this, firstChild);
}
});
};