如何更改样式类和&此d3.js树中祖先的文本内容?

时间:2016-05-22 02:59:27

标签: javascript angularjs d3.js tree

这是this question的后续行动。 (谢谢西里尔的所有帮助!)

我的问题变得有点诡计,我仍然需要一些帮助。 当用户点击任何节点的文本元素时,我希望发生以下情况:

  • 对于该元素的每个树祖先:
    • 追加" X"到那个文本元素
    • 删除样式类" class1"来自那个元素
    • 添加样式类" class2"来自那个元素
    • 从该元素中禁用onclick方法
  • 在这些步骤中,其他节点应保持完全不受影响。

我已将parent项添加到Object中,代表Cyril推荐的collapse()中的数据。所以我可以遍历到root的路径。然而,当我遍历这条路径时,我无法掌握文本的d3.js元素。我怎样才能做到这一点?一旦我这样做,上述操作对我来说将相对简单。

以下是我想要的示例。当用户点击Visualizations时,vizflare应该变为vizXflareX。他们的样式类应该从class1切换到class2。点击vizXflareX文字应无效。 并且不应以任何方式更新其他节点。

我该怎么办?当我遍历树时,我需要能够抓取d3.js绘图元素。

enter image description here

1 个答案:

答案 0 :(得分:1)

当您从单击的节点遍历到父根。

您还可以获取数据的DOM元素(具有圆圈和文本的组),如下面的函数所示。

function findNode(text){
  var DOM = d3.selectAll(".node")[0].find(function(node){
    return (d3.select(node).data()[0].name == text);
  })
  return DOM;
}

所以,现在当你拥有数据时,你想要找到它所关联的组。

您可以使用上述功能并致电。

  var k = findNode("physics");//this will return the DOM which has the node physics.

希望这有帮助!