如何删除树布局D3.js上的节点?

如何删除树布局D3.js上的节点?,d3.js,D3.js,我是D3.js的新手。 我正在尝试从树布局中删除节点,但找不到执行此操作的方法。 这是一个示例树布局。 我想这样动态删除: 我相信我应该对根json对象执行一些操作… 如果你们有想法,请告诉我。中回答了你们需要遵循的原则。该示例显示了如何在节点的单击处理程序上折叠树 如果修改已传递给布局管理器的数据结构,则树将相应更新。在上述示例中折叠树布局的情况下,删除节点的子节点属性:子节点的值存储在变量\u children中,以便可以再次切换回子节点。有关详细信息,请参阅切换功能 要删除一个节点,请

我是D3.js的新手。 我正在尝试从树布局中删除节点,但找不到执行此操作的方法。 这是一个示例树布局。

我想这样动态删除:

我相信我应该对根json对象执行一些操作…

如果你们有想法,请告诉我。

中回答了你们需要遵循的原则。该示例显示了如何在节点的单击处理程序上折叠树

如果修改已传递给布局管理器的数据结构,则树将相应更新。在上述示例中折叠树布局的情况下,删除节点的
子节点
属性:
子节点
的值存储在变量
\u children
中,以便可以再次切换回子节点。有关详细信息,请参阅
切换
功能


要删除一个节点,请遵循相同的逻辑,但从其父节点的
子节点列表中删除接收单击事件的节点。要查找父级,您可以在单击处理程序中遍历树,或者在数据结构中存储对每个父级的引用。

这将明确seb的答案。在设置单击处理程序的位置,放置以下内容:

.on("click", function(d) { 
    if (d.parent && d.parent.children){
        console.log('removing ' + d.name);
        var nodeToDelete = _.where(d.parent.children, {name: d.name});
        if (nodeToDelete){
            d.parent.children = _.without(d.parent.children, nodeToDelete[0]);
        }
    }
});
那应该会让你得到你想要的。确保调用从源数据(现在已修改)绘制树的任何方法。注意:我正在使用下划线库来使用u.where和u.without,尽管您可以使用纯js或其他库来实现这一点。例如,某些检查是为了方便和防止删除根节点


p、 由于您可能希望保持展开/折叠行为,因此只需在单击回调中添加一个条件,以检查修改器键以指定节点删除,例如d3.event.altKey

非常感谢您的回复。但我不明白。我是否误解了你的问题?很抱歉,我留下了未完成的评论。我想删除一个节点,而不是折叠。我想知道如何删除节点。