Javascript 如何使用代码删除D3树节点?
我有这把小提琴 我想删除一个节点(及其链接) 在我最后一次尝试时: 我已将DOM中的d.id保存为$('#inpSelidTAUsers').val() 然后尝试了这个代码Javascript 如何使用代码删除D3树节点?,javascript,jquery,node.js,d3.js,Javascript,Jquery,Node.js,D3.js,我有这把小提琴 我想删除一个节点(及其链接) 在我最后一次尝试时: 我已将DOM中的d.id保存为$('#inpSelidTAUsers').val() 然后尝试了这个代码 svgGroup.selectAll('path.link').filter(function(d, i) { if (d.target.id == $('#inpSelidTAUsers').val() ) return true; else return false; }).remove(); s
svgGroup.selectAll('path.link').filter(function(d, i)
{
if (d.target.id == $('#inpSelidTAUsers').val() )
return true; else return false;
}).remove();
svgGroup.selectAll('g.node').data(nodes).filter(function(d, i)
{
if (d.id == $('#inpSelidTAUsers').val())
return true; else return false;
}).remove();
此代码确实删除了屏幕上的节点和链接。但是如果我调用DrawItAll(root),那么节点会重新出现。请告诉我如何删除节点以使其保持不变:)您的选择返回元素g.node,尽管您已将其从视图中删除,但似乎您已将其重新绑定,未更改。因为您没有更改基础数据,所以当您重新绑定它时,您将得到与第一次相同的结果 如果希望节点消失,则需要更改数据集。您的数据在此对象中:
treeData = {
'name': 'Me','POS':'CEO','children':
[
{'name': 'Mr X','POS':'Sales Manager'},
{'name': 'Mr Y','POS':'Architect'},
{'name': 'Mr Z','POS':'Finance Assistant','children':[{'name': 'Mr U','POS':'Window Cleaner'}]},
]
};
要从treeData中删除子节点,最干净的方法可能是向对象添加如下函数:
treeData.removeChild = function(idxToRemove) {
var i, len, results;
results = [];
for (i = 0, len = this.children.length; i < len; i++) {
if (i !== idxToRemove) {
results.push(treeData.children[i]);
}
}
this.children = results;
};
然后重新绑定数据并更新视图。好吧,您正在从d3选择中删除节点和链接,但不是从数据中删除。因此,一旦再次渲染数据,它就会显示出来。或者我遗漏了什么?当然我指的是代表节点和链接的数据。您需要将其从dataset.Hi中删除。你是对的-我没有更新数据集。。。只是我不知道该怎么做。我看不到如何访问dataset.Hi。这起作用了。我必须和“树根”或“树根”一起工作。谢谢
treeData.removeChild(2) // removes the last child