javascript - 无法获取在 d3 中单击的节点的正确索引并更新该位置的 JSON

标签 javascript json d3.js

在可折叠的 TreeMap 中 https://bl.ocks.org/mbostock/4339083我想进行服务器调用来接收其他子项并将它们附加到我加载的现有 JSON 中。

我可以在单击时执行此操作,但是当我收到返回的 JSON 时,如何可靠地获取被单击节点的正确索引并在单击时更新 JSON。

JSON 中子级的深度与 function(d) { return d.depth } 直接关联 但在该深度点击哪个子项的索引似乎是问题所在。

表面上看起来很简单,您可以使用 d3 中 function(i) 给出的索引,但它会根据打开和关闭的节点而变化。 (打开和关闭笔中的几个节点并观察其更新)

我可以利用 d3 中的某种查找功能或其他索引功能吗?

depth: 2 = children.children 

如何获得 x

root.children[x].children[x].children = childArray;

在示例中只有一层子层,但这需要递归地工作,以便可以单击每个节点来访问更多数据。

完整示例在这里(第 264 行): http://codepen.io/pjbrof/pen/kXzGpd

root.children[0].children[0].children = childArray;
update(root);

最佳答案

根据我的经验,传递给任何 D3 访问器函数的索引始终是它在 DOM 中的索引,相对于它的父级:https://github.com/d3/d3-selection/issues/73

我针对此场景使用的解决方法是在点击事件中实现对象查找或数组过滤器,匹配唯一 ID。

关于javascript - 无法获取在 d3 中单击的节点的正确索引并更新该位置的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38983905/

相关文章:

javascript - 现代浏览器中的鼠标滚轮事件

javascript - Fader 不同于 Div

javascript - 防止 IE10 中的 location.hash "jumping"

php - jQuery/Ajax 请求被发送两次

javascript - 添加不同的形状

javascript - 使用 <canvas> 在 JavaScript 中实现 Conway 的生命游戏

java - 使用自定义类型适配器添加对象,gson 中的 jsonwriter

javascript - 使用 parseFloat Sanitize 或其他方法清理变量输出值问题

javascript - 更改 forceNetwork for networkD3 中图例文本的颜色

javascript - 从 Nodejs 服务器直接渲染和提供 d3 可视化