d3js强制网络:按住Ctrl键单击节点到外部链接?

时间:2015-03-05 17:37:44

标签: d3.js

我有一个简单的强制网络图,我想使用ctrl-Click来导航到外部URL。请参阅JS Fiddle:

https://jsfiddle.net/NovasTaylor/o1qesn6k/

我在点击事件下使用d3.event.ctrlKey成功硬编码了所有节点的链接,如:

 var nodes = svg.selectAll("g.node")
                 .data(dataset.nodes)
                 .enter()
                 .append("g")
                 .attr("class", "node")
                 .on("dblclick", dblclick)
                 .on("click", function () {
                     if (d3.event.ctrlKey) {
                     location.href = 'http://www.google.com';
                     }
                  })
                 .call(drag);

我想要使用为源数据中的每个节点指定的URL作为d.url(请参阅小提琴 - 该值可用于节点" B")。

我已经看过一些关于使用标签对此进行编码的参考文献,但无法获取点击事件来导航到网址。目标URL应在同一窗口中打开,替换强制网络图。

非常感谢您的协助。

干杯,

更新:Lars'建议,解决问题的代码是:

  var nodes = svg.selectAll("g.node")
      .data(dataset.nodes)
      .enter()
      .append("g")
      .attr("class", "node")
      .on("dblclick", dblclick)
      .on("click", function (d) {
         if (d3.event.ctrlKey) {
          location.href = d.url;
      }
  })

1 个答案:

答案 0 :(得分:4)

D3中几乎所有的回调函数都被赋予绑定到元素的数据作为参数。您可以在函数定义中引用它并动态设置值。在你的情况下,它将是

.on("click", function (d) {
     if (d3.event.ctrlKey) {
      location.href = d.url;
  }