【问题标题】:Update indexes when deleting nodes删除节点时更新索引
【发布时间】:2016-03-17 23:56:21
【问题描述】:

我可以通过鼠标点击突出显示多个节点。我有一个按钮,按下时会删除所有突出显示的节点。现在这工作正常。就在我再次强调它们的时候。

突出显示通过获取刚刚单击的节点的索引来工作。但是删除后索引似乎没有改变。

我找到了这个例子:D3 update on node removal always remove the last entry in SVG DOM

但这似乎并没有解决我的问题:(

基本上我要的是当我删除节点时,如何更新索引?

【问题讨论】:

  • 不要使用索引,使用数据。
  • 谢谢。它使用数据工作。但问题是,我想使用索引,因为有时我不知道那条数据是否可用。有没有办法给节点一个唯一的值?即使在删除节点并重新运行更新功能(仅设置节点和链接)之后
  • 您可以为每个节点生成一个ID。如果没有看到您实际在做什么,就无法真正告诉您更多信息。特别是当你说某条数据可能不可用时,我不清楚你的意思是什么——在这种情况下你仍然想展示一些东西吗?
  • 没关系。基本上,我在调用 update() 时给每个节点一个唯一的编号;当我删除一些节点时,我再次调用更新,认为它会用新的“覆盖”原始唯一编号。但它似乎只是保留了旧的。
  • D3 并没有在幕后施展任何魔法——如果你想更新某些东西,你必须明确地去做。

标签: javascript d3.js


【解决方案1】:

解决了。基本上我的问题是,当我是splicing 数据时,我迭代的数组改变了长度,因此i 不在正确的位置。所以我在拼接数组的时候在循环中递减了i。类似的东西:

 for(i=0;i<nodeData.length;i++){
      if(nodeData[i].name === 'thisTest')
      {
        nodeData.splice(i--,1); 
      }
    }

这会删除nodeData[i],但同时会减少i,因此它位于数组中的正确索引处:)

【讨论】:

    猜你喜欢
    • 2019-11-15
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多