D3.js 如何在d3树上按值删除节点?

D3.js 如何在d3树上按值删除节点?,d3.js,tree,D3.js,Tree,我想删除将0作为“cardinalita”的节点。 现在我有隐藏的节点,但我想删除空链接 情况如下: var treeData=[ { “名称”:“第一”, “父项”:“null”, “红衣主教”:“9”, “儿童”:[ { “名称”:“第二个”, “家长”:“第一”, “红衣主教”:“1”, “儿童”:[ { “姓名”:“第三名”, “父项”:“第二项”, “红衣主教”:“63”, “儿童”:[ { “姓名”:“第四名”, “家长”:“第三位”, “红衣主教”:“39”, “儿童”:[ {

我想删除将0作为“cardinalita”的节点。 现在我有隐藏的节点,但我想删除空链接

情况如下:

var treeData=[
{
“名称”:“第一”,
“父项”:“null”,
“红衣主教”:“9”,
“儿童”:[
{
“名称”:“第二个”,
“家长”:“第一”,
“红衣主教”:“1”,
“儿童”:[
{
“姓名”:“第三名”,
“父项”:“第二项”,
“红衣主教”:“63”,
“儿童”:[
{
“姓名”:“第四名”,
“家长”:“第三位”,
“红衣主教”:“39”,
“儿童”:[
{
“姓名”:“最后一次”,
“家长”:“第四位”,
“红衣主教”:“70”,
“儿童”:[
{
“名称”:“特殊”,
“家长”:“最后一位”,
“红衣主教”:“11”
}
]
},
{
“名称”:“特殊”,
“家长”:“第四位”,
“cardinalita”:“0”
}
]
},
{
“名称”:“空”,
“家长”:“第三位”,
“cardinalita”:“0”,
“儿童”:[
{
“名称”:“特殊”,
“父项”:“null”,
“红衣主教”:“10”
}
]
}
]
},
{
“姓名”:“第三名”,
“父项”:“第二项”,
“红衣主教”:“528”
}
]
},
{
“名称”:“第二个”,
“家长”:“第一”,
“红衣主教”:“33”,
“儿童”:[
{
“姓名”:“第三名”,
“父项”:“第二项”,
“红衣主教”:“63”
}
]
}
]
}
];
//*************生成树形图*****************
var margin={top:0,right:120,bottom:40,left:60},
宽度=1000-margin.right-margin.left,
高度=500-margin.top-margin.bottom;
var i=0,
持续时间=750,
根;
var tree=d3.layout.tree()
//菲格利酒店
.separation(函数分离(a,b){返回a.parent==b.parent?1.5:1;})
.尺寸([高度、宽度]);
var diagonal=d3.svg.diagonal()
.投影(函数(d){返回[d.y,d.x];});
var svg=d3.选择(“图表”).追加(“svg”)
.attr(“宽度”,宽度+边距。右侧+边距。左侧)
.attr(“高度”,高度+边距。顶部+边距。底部)
.附加(“g”)
.attr(“转换”、“平移”(+margin.left+)、“+margin.top+”);
根=树数据[0];
root.x0=高度/2;
root.y0=0;
更新(根);
d3.选择(self.frameElement).style(“高度”,“500px”);
函数更新(源){
//计算新的树布局。
var nodes=tree.nodes(root).reverse(),
链接=树。链接(节点);
//为固定深度进行规格化。
forEach(函数(d){d.y=d.depth*160;});
//更新节点…
var node=svg.selectAll(“g.node”)
.data(节点,函数(d){返回d.id | |(d.id=++i)});
//在父节点的上一个位置输入任何新节点。
var nodeEnter=node.enter().append(“g”)
.attr(“类”、“节点”)
.attr(“transform”,函数(d){return“translate”(“+source.y0+”,“+source.x0+”));})
//。开启(“点击”,点击);
//康泰托雷睾丸
追加(“svg:rect”)
.attr(“宽度”,函数(d){if(d.name!=“null”| |(d.cardinalita<1)){return“70”;})
.attr(“高度”,功能(d){
返回21;
})
.attr(“r”,1e-6)
.attr(“y”,-10)
.attr(“x”,-50)
.attr(“rx”,0)
.attr(“ry”,0)
.attr(“stroke”,函数(d){if(d.name!=“null”&&d.cardinalita>=1){return“#23527c”;}})
.attr(“笔划宽度”、“2”)
.样式(“填充”,功能(d){
返回d.“儿童?”#ccc:“#fff”;
})
.style(“填充不透明度”,函数(d){if(d.name='null'| |(d.cardinalita<1)){return“0”;})
//康特尼托雷红衣主教
追加(“svg:rect”)
.attr(“宽度”,25)
.attr(“高度”,功能(d){
返回21;
})
.attr(“r”,1e-6)
.attr(“y”,11)
.attr(“x”,-5)
.attr(“rx”,0)
.attr(“ry”,0)
.attr(“stroke”,函数(d){if(d.name!=“null”&&d.cardinalita>=1){return“#23527c”;}})
.attr(“笔划宽度”、“2”)
.style(“填充”、“fff”)
.style(“填充不透明度”,函数(d){if(d.name='null'| |(d.cardinalita<1)){return“0”;})
//诺梅德尔诺多酒店
nodeEnter.append(“文本”)
.attr(“x”,函数(d){
返回d.U儿童?-8:8;
})
.attr(“y”,-4)
.attr(“x”,-40)
.attr(“dy”,“0.7em”)
.style(“字体大小”、“14”)
.style(“字体大小”、“粗体”)
.文本(功能(d){
如果(d.name!=“null”&&d.cardinalita!=0)
返回d.name;
});
//红衣主教
nodeEnter.append(“文本”)
.attr(“x”,函数(d){
返回d.U儿童?-8:8;
})
.attr(“y”,18)
.attr(“x”,-2)
.attr(“dy”,“0.7em”)
.style(“字体大小”、“14”)
.文本(功能(d){
如果(d.name!=“null”&&d.cardinalita>=1)
返回红衣主教;
});
//将节点转换到其新位置。
var nodeUpdate=节点。
      // Transition links to their new position.
      link.transition()
          .duration(duration)
          .attr("d", function(d){
             if (!d.target.children && d.target.cardinalita === "0")
               return "M0,0"; //<-- draw nothing
             else
               return diagonal(d);
          });