ほとんどの場合、コードはd
オブジェクト (ツリー内のノードを表す) であり、オブジェクトのデフォルトの to-string 動作が "[object Object]" を返すため、機能しませんでした。class 属性を「[object Object]」に設定しても、クラスごとにノードを選択するのに役立ちません。
class 属性を data のプロパティとして定義する必要があります。たとえば、データにtype
プロパティがある場合、クラス属性を次のように定義できます。
.attr("class", function(d) { return "node " + d.type; })
次に、対話用の mouseover および mouseout ハンドラーを登録します。
.on("mouseover", function(d) { highlight(d.type); })
.on("mouseout", function(d) { highlight(null); })
最後に、ハイライト機能はクラスごとにノードを選択し、塗りつぶしの色をオーバーライドするアクティブなクラスを切り替えます。
function highlight(type) {
if (type == null) d3.selectAll(".node").classed("active", false);
else d3.selectAll(".node." + type).classed("active", true);
}
アクティブなクラスは次のように定義されます。
.node.active {
fill: red;
}
ここでのライブ例:
関連するノードを選択する方法の詳細については、関連する要素を選択する方法 (および変更する方法)に対する私の回答を参照してください。