Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 扩展d3树布局,在最终节点提供HTML框_Javascript_Svg_D3.js_Treeview_Mindmapping - Fatal编程技术网

Javascript 扩展d3树布局,在最终节点提供HTML框

Javascript 扩展d3树布局,在最终节点提供HTML框,javascript,svg,d3.js,treeview,mindmapping,Javascript,Svg,D3.js,Treeview,Mindmapping,我想扩展d3树布局,为每个最终节点提供超链接和文本 例如,如果你去 flare> analytics > ckuster > AgglomerativeClustr 我想在文本聚合集群下,我想有一个能够自定义HTML的文本框 我将如何做到这一点?有几种方法可以实现您想要的,但我相信下面的解决方案既简单又有效 我将从一个类似于您的示例开始,该示例也没有任何超链接: { "children": [{ "name":

我想扩展d3树布局,为每个最终节点提供超链接和文本

例如,如果你去

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")
    ...
如果你不完全解决你的问题,你可能想考虑自己制作一个小提琴。