我想在可折叠树示例中的节点文本上添加超链接。
我怎样才能做到这一点?
我是一个 Javascript/svg/d3js 菜鸟,但我通过在文本上放置一个超链接的透明矩形来“解决”这个问题,这个解决方法可以作为bl.ock使用:
nodeEnter
.append("a")
.attr("xlink:href", function (d) { return "http://www.example.com/flare/" + d.id; })
.append("rect")
.attr("class", "clickable")
.attr("y", -6)
.attr("x", function (d) { return d.children || d._children ? -60 : 10; })
.attr("width", 50) //2*4.5)
.attr("height", 12)
.style("fill", "lightsteelblue")
.style("fill-opacity", .3) // set to 1e-6 to make transparent
;
我添加了一个额外的clickable
样式并添加.on("click", click)
到圆圈而不是 group ( g
) 元素。
这可行,但缺点是可点击矩形的大小与标签文本的大小不符。
我真的很期待更好的解决方案,所以+1为您的问题!
如果您删除全局节点上的点击处理程序并附加 2 个不同的点击处理程序:
单击文本时,您可以有不同的行为。如果您对该元素进行一些样式设置,它可以看起来完全像一个超链接。
在这里查看我的小提琴:http: //jsfiddle.net/empie/EX83X/
单击处理程序
var nodeEnter = node.enter().append("g")
.attr("class", "node")
.attr("transform", function(d) { return "translate(" + source.y0 + "," + source.x0 + ")"; });
nodeEnter.append("circle")
.attr("r", 1e-6)
.style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; }).on("click", click);;
nodeEnter.append("text")
.attr("x", function(d) { return d.children || d._children ? -10 : 10; })
.attr("dy", ".35em")
.attr("text-anchor", function(d) { return d.children || d._children ? "end" : "start"; })
.text(function(d) { return d.name; })
.style("fill-opacity", 1e-6)
.attr("class", "hyper").on("click", clack);
function clack(d) {
alert(d.name);
}
和 CSS:
.hyper {
color: blue;
text-decoration: underline;
}
.hyper:hover {
color: yellow;
text-decoration: none;
}
我向节点添加了另一行文本,其中包含有关链接的一些信息,如下所示:
nodeEnter.append("a")
.attr("xlink:href", function(d) { return d.path; })
.append("text")
.attr("class", "clickable")
.attr("y", 16)
.attr("x", function (d) { return d.children || d._children ? -10 : 10; })
.attr("text-anchor", function(d) { return d.children || d._children ? "end" : "start"; })
.text(function(d) { return d.label; })
其中 path 和 label 具有每个节点所需的数据。