Javascript 扩展d3树布局,在最终节点提供HTML框
我想扩展d3树布局,为每个最终节点提供超链接和文本 例如,如果你去Javascript 扩展d3树布局,在最终节点提供HTML框,javascript,svg,d3.js,treeview,mindmapping,Javascript,Svg,D3.js,Treeview,Mindmapping,我想扩展d3树布局,为每个最终节点提供超链接和文本 例如,如果你去 flare> analytics > ckuster > AgglomerativeClustr 我想在文本聚合集群下,我想有一个能够自定义HTML的文本框 我将如何做到这一点?有几种方法可以实现您想要的,但我相信下面的解决方案既简单又有效 我将从一个类似于您的示例开始,该示例也没有任何超链接: { "children": [{ "name":
flare> analytics > ckuster > AgglomerativeClustr
我想在文本聚合集群下,我想有一个能够自定义HTML的文本框
我将如何做到这一点?有几种方法可以实现您想要的,但我相信下面的解决方案既简单又有效 我将从一个类似于您的示例开始,该示例也没有任何超链接:
{
"children": [{
"name": "AgglomerativeCluster",
"size": 3938,
"url": "http://www.example.com/"
}, {
"name": "CommunityStructure",
"size": 3812,
"url": "http://www.example.com/"
}, {
"name": "HierarchicalCluster",
"size": 6714,
"url": "http://www.example.com/"
}, {
"name": "MergeEdge",
"size": 743,
"url": "http://www.example.com/"
}
,
并将引导您完成所有必要但简单的修改
首先,让我们为要将标签作为超链接的节点添加字段url:
{
"children": [{
"name": "AgglomerativeCluster",
"size": 3938,
"url": "http://www.example.com/"
}, {
"name": "CommunityStructure",
"size": 3812,
"url": "http://www.example.com/"
}, {
"name": "HierarchicalCluster",
"size": 6714,
"url": "http://www.example.com/"
}, {
"name": "MergeEdge",
"size": 743,
"url": "http://www.example.com/"
}
现在,让我们编写代码,选择节点数据包含字段url中任何内容的所有标签,并为每个标签添加适当的时钟处理程序,以打开相应的url:它还为鼠标指针设置不同的光标指针,以便用户知道标签实际上是一个超链接
d3.selectAll(".node text")
.filter(function(d){ return d.url; })
.style("cursor", "pointer")
.on("click", function(d){
document.location.href = d.url;
});
就这样
有几种方法可以实现你想要的,但我相信下面的解决方案既简单又有效 我将从一个类似于您的示例开始,该示例也没有任何超链接:
{
"children": [{
"name": "AgglomerativeCluster",
"size": 3938,
"url": "http://www.example.com/"
}, {
"name": "CommunityStructure",
"size": 3812,
"url": "http://www.example.com/"
}, {
"name": "HierarchicalCluster",
"size": 6714,
"url": "http://www.example.com/"
}, {
"name": "MergeEdge",
"size": 743,
"url": "http://www.example.com/"
}
,
并将引导您完成所有必要但简单的修改
首先,让我们为要将标签作为超链接的节点添加字段url:
{
"children": [{
"name": "AgglomerativeCluster",
"size": 3938,
"url": "http://www.example.com/"
}, {
"name": "CommunityStructure",
"size": 3812,
"url": "http://www.example.com/"
}, {
"name": "HierarchicalCluster",
"size": 6714,
"url": "http://www.example.com/"
}, {
"name": "MergeEdge",
"size": 743,
"url": "http://www.example.com/"
}
现在,让我们编写代码,选择节点数据包含字段url中任何内容的所有标签,并为每个标签添加适当的时钟处理程序,以打开相应的url:它还为鼠标指针设置不同的光标指针,以便用户知道标签实际上是一个超链接
d3.selectAll(".node text")
.filter(function(d){ return d.url; })
.style("cursor", "pointer")
.on("click", function(d){
document.location.href = d.url;
});
就这样
注意:当我完成这篇文章时,我的好友@livided已经给出了答案。但是由于OP表达了对定制HTML的渴望,这可能仍然是相关的 基本上,人们希望以一种或另一种形式将HTML与SVG混合,这是一种常见的请求。但是,您可能找不到这种现成的实现,因为它需要时间,并且需要大量的布局考虑才能正常工作。请参见我在下面链接的fiddle中的x,y属性设置-为简单起见,进行了硬编码。话虽如此,我还是想帮助你 最常见的解决方案是使用。但请注意IE不支持它。下面是伟大的迈克的一篇文章,展示了一个非常简单的例子。我冒昧地扩展了它,并创建了一个更复杂的示例,一个带有textarea的表单。我相信这应该足以产生一些想法,让你行动起来
svg.append("foreignObject")
.attr("x", 40)
.attr("y", 40)
.attr("width", 480)
.attr("height", 240)
.append("xhtml:body")
...
注释:如果你不完全解决你的问题,你可能会考虑生成一个自己的小提琴。
< P>注释:在我完成这件事的时候,我的好朋友@ VIVIDD已经提供了答案。但是由于OP表达了对定制HTML的渴望,这可能仍然是相关的 基本上,人们希望以一种或另一种形式将HTML与SVG混合,这是一种常见的请求。但是,您可能找不到这种现成的实现,因为它需要时间,并且需要大量的布局考虑才能正常工作。请参见我在下面链接的fiddle中的x,y属性设置-为简单起见,进行了硬编码。话虽如此,我还是想帮助你 最常见的解决方案是使用。但请注意IE不支持它。下面是伟大的迈克的一篇文章,展示了一个非常简单的例子。我冒昧地扩展了它,并创建了一个更复杂的示例,一个带有textarea的表单。我相信这应该足以产生一些想法,让你行动起来svg.append("foreignObject")
.attr("x", 40)
.attr("y", 40)
.attr("width", 480)
.attr("height", 240)
.append("xhtml:body")
...
如果你不完全解决你的问题,你可能想考虑自己制作一个小提琴。