Javascript d3树布局,鼠标悬停在链接上显示文本

Javascript d3树布局,鼠标悬停在链接上显示文本,javascript,jquery,html,css,d3.js,Javascript,Jquery,Html,Css,D3.js,我使用d3树布局来构建一个图形,并使用对角线元素来构建节点之间的链接。我想在鼠标悬停在链接上时显示某些文本。是否可以嵌套悬停 var tooltip=d3.选择(“主体”) .附加(“div”) .attr(“类”、“我的工具提示”)//添加工具提示类 .style(“位置”、“绝对”) .风格(“z指数”、“10”) .样式(“可见性”、“隐藏”); var flare={ “名称”:“基础”, “儿童”:[{ “名称”:“类型A”, “儿童”:[{ “名称”:“第1节” }, { “名称”

我使用d3树布局来构建一个图形,并使用对角线元素来构建节点之间的链接。我想在鼠标悬停在链接上时显示某些文本。是否可以嵌套悬停

var tooltip=d3.选择(“主体”)
.附加(“div”)
.attr(“类”、“我的工具提示”)//添加工具提示类
.style(“位置”、“绝对”)
.风格(“z指数”、“10”)
.样式(“可见性”、“隐藏”);
var flare={
“名称”:“基础”,
“儿童”:[{
“名称”:“类型A”,
“儿童”:[{
“名称”:“第1节”
}, {
“名称”:“第2节”
}]
}, {
“名称”:“类型B”
}]
};
var保证金={
前20名,
右:120,,
底数:20,
左:120
},
宽度=960-margin.right-margin.left,
高度=800-margin.top-margin.bottom;
var i=0,
持续时间=750,
根;
var tree=d3.layout.tree()
.尺寸([高度、宽度]);
var diagonal=d3.svg.diagonal()
.投影(功能(d){
返回[d.y,d.x];
});
var svg=d3.选择(“正文”).追加(“svg”)
.attr(“宽度”,宽度+边距。右侧+边距。左侧)
.attr(“高度”,高度+边距。顶部+边距。底部)
.附加(“g”)
.attr(“转换”、“平移”(+margin.left+)、“+margin.top+”);
//d3.json(“http://bl.ocks.org/mbostock/raw/4063550/flare.json,函数(错误,flare){
根=耀斑;
root.x0=高度/2;
root.y0=0;
功能崩溃(d){
如果(d.儿童){
d、 _children=d.children;
d、 _儿童。forEach(崩溃);
d、 children=null;
}
}
根。子。forEach(塌陷);
更新(根);
//});
d3.选择(self.frameElement).style(“高度”,“800px”);
函数更新(源){
//计算新的树布局。
var nodes=tree.nodes(root).reverse(),
链接=树。链接(节点);
//为固定深度进行规格化。
nodes.forEach(函数(d){
d、 y=d.深度*180;
});
//更新节点…
var node=svg.selectAll(“g.node”)
.数据(节点、功能(d){
返回d.id | |(d.id=++i);
});
//在父节点的上一个位置输入任何新节点。
var nodeEnter=node.enter().append(“g”)
.attr(“类”、“节点”)
.attr(“转换”,函数(d){
返回“translate”(“+source.y0+”,“+source.x0+”);
})
.on(“单击”,单击)
.on(“鼠标悬停”,功能(d){
var g=d3。选择(此);//节点
//该类用于以后删除附加文本
var info=g.append('text')
.classed('info',true)
.attr('x',20)
.attr('y',10)
.文本(“待显示的样本文本”);
})
.on(“mouseout”,函数(){
//将鼠标移出时的信息文本删除。
d3.select(this).select('text.info').remove();
});
nodeEnter.append(“圆”)
.attr(“r”,1e-6)
.样式(“填充”,功能(d){
返回d.#儿童?“淡蓝色”:“fff”;
});
nodeEnter.append(“文本”)
.attr(“x”,函数(d){
返回d.children | | d.| U儿童?-10:10;
})
.attr(“dy”,“.35em”)
.attr(“文本锚定”,函数(d){
返回d.children | d.| u children?“结束”:“开始”;
})
.文本(功能(d){
返回d.name;
})
.样式(“填充不透明度”,1e-6);
//将节点转换到其新位置。
var nodeUpdate=node.transition()
.持续时间(持续时间)
.attr(“转换”,函数(d){
返回“translate”(“+d.y+”,“+d.x+”);
});
节点更新。选择(“圆圈”)
.attr(“r”,4.5)
.样式(“填充”,功能(d){
返回d.#儿童?“淡蓝色”:“fff”;
});
nodeUpdate.select(“文本”)
.样式(“填充不透明度”,1);
//将退出节点转换到父节点的新位置。
var nodeExit=node.exit().transition()
.持续时间(持续时间)
.attr(“转换”,函数(d){
返回“translate”(“+source.y+”,“+source.x+”);
})
.remove();
nodeExit.select(“圆”)
.attr(“r”,1e-6);
nodeExit.select(“文本”)
.样式(“填充不透明度”,1e-6);
//更新链接…
var link=svg.selectAll(“path.link”)
.数据(链接、功能(d){
返回d.target.id;
})
//在父对象的上一个位置输入任何新链接。
link.enter()插入(“路径”,“g”)
.attr(“类”、“链接”)
.attr(“d”,函数(d){
变量o={
x:source.x0,
y:source.y0
};
返回对角线({
资料来源:o,
目标:o
});
}).on('mouseover',函数(d){
控制台日志(d);
工具提示.样式(“可见性”、“可见”)
.text('SOURCE:'+d.SOURCE.name+'| | TARGET:'+d.TARGET.name)
})
.on(“mousemove”,function(){
返回tooltip.style(“top”、(d3.event.pageY-40)+“px”).style(“left”、(d3.event.pageX-130)+“px”);
})
.on(“mouseout”,函数(){
返回工具提示样式(“可见性”、“隐藏”);
});;
//过渡链接到他们的新位置。
link.transition()
.持续时间(持续时间)
.attr(“d”,对角线);
//将退出节点转换到父节点的新位置。
link.exit().transition()
.持续时间(持续时间)
.attr(“d”,函数(d){
变量o={
x:source.x,
y:来源,y
};
返回对角线({
资料来源:o,
目标:o
});
})
.remove();
//更新链接文本
var linktext=svg.selectAll(“g.link”)
.数据(链接、功能(d){
返回d.target.id;
});
linktext.enter()
.插入(“g”)
.attr(“类”、“链接”)
.append(“文本”)
.attr(“dy”,“.35em”)
.attr(“文本锚定”、“中间”)
.文本(功能(d){
//console.log(d.target.name);
返回d.target.name;
})
.on('mouseover',函数(d){
console.log('文本悬停:'+d.target.name)
});
//将链接文本转换到其新位置
linktext.transition()
.持续时间(持续时间)
.attr(“转换”,函数(d){
返回“translate(“+((d.source.y+d.target.y)/2+”,“+((d.source.x+d.target.x)/2+”);
})
//将现有链接文本转换到父对象的新位置。
linktext.exit(
var tooltip = d3.select("body")
        .append("div")
        .attr("class", "my-tooltip")//add the tooltip class
        .style("position", "absolute")
        .style("z-index", "10")
        .style("visibility", "hidden");
.on('mouseover', function(d) {
      console.log(d);
      tooltip.style("visibility", "visible")
        .text('SOURCE : ' + d.source.name + ' || TARGET : ' + d.target.name)
    })
.on("mousemove", function() {
  return tooltip.style("top", (d3.event.pageY - 40) + "px").style("left", (d3.event.pageX - 130) + "px");
}) 
.on("mouseout", function() {
  return tooltip.style("visibility", "hidden");
});
.my-tooltip {
  background: rgba(0, 0, 255, 0.2);
}