title: hyperlinks in children (d3.js objects) in a collapsible force layout
body: <p>I have no idea how to program in d3.js, and I am aware that my question might be simple or even stupid. I am trying to modify this visualization <a href="http://bl.ocks.org/mbostock/1093130" rel="nofollow">http://bl.ocks.org/mbostock/1093130</a>, by adding hyperlinks to the last objects of the hierarchy (the orange ones). I understand that there is something happening already (collapsing, expanding) when someone clicks on the parent elements, but the children (the last ones) don't seem to perform a particular action on the click, is it possible to add a hyperlink there? </p>
  
  <p>This is the index.html </p>
  
  <pre><code>&lt;!DOCTYPE html&gt;
  &lt;meta charset="utf-8"&gt;
  &lt;style&gt;
  
  .node circle {
    cursor: pointer;
    stroke: #3182bd;
    stroke-width: 1.5px;
  }
  
  .node text {
    font: 10px sans-serif;
    pointer-events: none;
    text-anchor: middle;
  }
  
  line.link {
    fill: none;
    stroke: #9ecae1;
    stroke-width: 1.5px;
  }
  
  &lt;/style&gt;
  &lt;body&gt;
  &lt;script src="http://d3js.org/d3.v3.min.js"&gt;&lt;/script&gt;
  &lt;script&gt;
  
  var width = 960,
      height = 500,
      root;
  
  var force = d3.layout.force()
      .linkDistance(80)
      .charge(-120)
      .gravity(.05)
      .size([width, height])
      .on("tick", tick);
  
  var svg = d3.select("body").append("svg")
      .attr("width", width)
      .attr("height", height);
  
  var link = svg.selectAll(".link"),
      node = svg.selectAll(".node");
  
  d3.json("graph.json", function(error, json) {
    root = json;
    update();
  });
  
  function update() {
    var nodes = flatten(root),
        links = d3.layout.tree().links(nodes);
  
    // Restart the force layout.
    force
        .nodes(nodes)
        .links(links)
        .start();
  
    // Update links.
    link = link.data(links, function(d) { return d.target.id; });
  
    link.exit().remove();
  
    link.enter().insert("line", ".node")
        .attr("class", "link");
  
    // Update nodes.
    node = node.data(nodes, function(d) { return d.id; });
  
    node.exit().remove();
  
    var nodeEnter = node.enter().append("g")
        .attr("class", "node")
        .on("click", click)
        .call(force.drag);
  
    nodeEnter.append("circle")
        .attr("r", function(d) { return Math.sqrt(d.size) / 10 || 4.5; });
  
    nodeEnter.append("text")
        .attr("dy", ".35em")
        .text(function(d) { return d.name; });
  
    node.select("circle")
        .style("fill", color);
  }
  
  function tick() {
    link.attr("x1", function(d) { return d.source.x; })
        .attr("y1", function(d) { return d.source.y; })
        .attr("x2", function(d) { return d.target.x; })
        .attr("y2", function(d) { return d.target.y; });
  
    node.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
  }
  
  function color(d) {
    return d._children ? "#3182bd" // collapsed package
        : d.children ? "#c6dbef" // expanded package
        : "#fd8d3c"; // leaf node
  }
  
  // Toggle children on click.
  function click(d) {
    if (d3.event.defaultPrevented) return; // ignore drag
    if (d.children) {
      d._children = d.children;
      d.children = null;
    } else {
      d.children = d._children;
      d._children = null;
    }
    update();
  }
  
  // Returns a list of all nodes under the root.
  function flatten(root) {
    var nodes = [], i = 0;
  
    function recurse(node) {
      if (node.children) node.children.forEach(recurse);
      if (!node.id) node.id = ++i;
      nodes.push(node);
    }
  
    recurse(root);
    return nodes;
  }
  
  &lt;/script&gt;
  </code></pre>
  
  <p>And this is the json:</p>
  
  <pre><code>{
   "name": "flare",
   "children": [
    {
     "name": "analytics",
     "children": [
      {
       "name": "cluster",
       "children": [
        {"name": "AgglomerativeCluster", "size": 3938},
        {"name": "CommunityStructure", "size": 3812},
        {"name": "HierarchicalCluster", "size": 6714},
        {"name": "MergeEdge", "size": 743}
       ]
      },
      {
       "name": "graph",
       "children": [
        {"name": "BetweennessCentrality", "size": 3534},
        {"name": "LinkDistance", "size": 5731},
        {"name": "MaxFlowMinCut", "size": 7840},
        {"name": "ShortestPaths", "size": 5914},
        {"name": "SpanningTree", "size": 3416}
       ]
      },
      {
       "name": "optimization",
       "children": [
        {"name": "AspectRatioBanker", "size": 7074}
       ]
      }
     ]
    }
   ]
  }
  </code></pre>
  
  <p>I would like that "AspectRatioBanker" could take me to www.aspectratiobanker.com, for example. Thank you!</p>