I am having trouble hyperlinking children in a graph of a Reingold-Tifold tree. The graph is built in D3 and is based on the fact that Mike Bostock uses an example: http://bl.ocks.org/mbostock/4339184
My code and segment of my JSON file are below.
At this point, the graph works fine - if I click on the parent node, it expands to show a series of child nodes that are contained in my JSON file. But when I get to the level of a child, I want to make the word a hyperlink. I don’t understand how to do this.
I used the previous SO question / answer - Hyperlinks in d3.js objects - to figure out how to add a URL to my JSON data (for now, everything is just related to Google.co.uk). But I don’t understand how to associate this URL with my tree so that the child nodes become hyperlinks.
Can you tell me how I can do this?
Thanks for any help. (And thanks, @ IH8, for your help so far.)
Matt
<html xmlns:xlink="http://www.w3.org/1999/xlink"> <head><meta charset="utf-8"> <style> .node { cursor: pointer; } .node circle { fill: #FF0000; stroke: black; stroke-width: 1.5px; } .node text { font: 11px sans-serif; } .link { fill: none; stroke: #FF0000; stroke-width: 1.5px; } </style> <style id="style-1-cropbar-clipper"> .en-markup-crop-options { top: 18px !important; left: 50% !important; margin-left: -100px !important; width: 200px !important; border: 2px rgba(255,255,255,.38) solid !important; border-radius: 4px !important; } .en-markup-crop-options div div:first-of-type { margin-left: 0px !important; } </style></head><body> <script src="http://d3js.org/d3.v3.min.js"></script> <script> var margin = {top: 20, right: 120, bottom: 20, left: 120}, width = 960 - margin.right - margin.left, height = 800 - margin.top - margin.bottom; var i = 0, duration = 750, root; var tree = d3.layout.tree() .size([height, width]); var diagonal = d3.svg.diagonal() .projection(function(d) { return [dy, dx]; }); var svg = d3.select("body").append("svg") .attr("width", width + margin.right + margin.left) .attr("height", height + margin.top + margin.bottom) .append("g") .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); d3.json("/sites/default/files/tcs/D3/data/turbo.json", function(error, turbo) { root = turbo; root.x0 = height / 2; root.y0 = 0; function collapse(d) { if (d.children) { d._children = d.children; d._children.forEach(collapse); d.children = null; } } root.children.forEach(collapse); update(root); }); d3.select(self.frameElement).style("height", "800px"); function update(source) { </script> </body> </html>
Part of my JSON file:
{ "name": "turbo", "children": [ { "name": "Level 1", "children": [ { "name": "Google", "children": [ {"name": "Website", "size": 3938, "URL":"http://www.google.co.uk"}, {"name": "CommunityStructure", "size": 3812, "URL":"http://www.google.co.uk"}, {"name": "HierarchicalCluster", "size": 6714, "URL":"http://www.google.co.uk"}, {"name": "MergeEdge", "size": 743, "URL":"http://www.google.co.uk"} ] }, { "name": "graph", "children": [ {"name": "BetweennessCentrality", "size": 3534, "URL":"http://www.google.co.uk"}, {"name": "LinkDistance", "size": 5731, "URL":"http://www.google.co.uk"}, {"name": "MaxFlowMinCut", "size": 7840, "URL":"http://www.google.co.uk"}, {"name": "ShortestPaths", "size": 5914, "URL":"http://www.google.co.uk"}, {"name": "SpanningTree", "size": 3416, "URL":"http://www.google.co.uk"} ] }, { "name": "optimization", "children": [ {"name": "AspectRatioBanker", "size": 7074, "URL":"http://www.google.co.uk"} ] } ] }, . . .