Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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树节点?_Javascript_Jquery_Node.js_D3.js - Fatal编程技术网

Javascript 如何使用代码删除D3树节点?

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

我有这把小提琴

我想删除一个节点(及其链接)

在我最后一次尝试时:

我已将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();

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