D3 Ajout de code HTML pour les Nœuds

J'ai regardé pour répondre à cela, mais aucune des questions similaires de m'aider dans ma situation. J'ai un D3 arbre qui crée de nouveaux nœuds au moment de l'exécution. Je voudrais ajouter du code HTML (donc je peux format) à un nœud lorsque je mouseover qui nœud particulier. Droit maintenant, je peux ajouter du code HTML, mais sa non formaté. S'il vous plaît aider!

JSFiddle: http://jsfiddle.net/Srx7z/

Code JS:

 var width = 960,
height = 500;
var tree = d3.layout.tree()
.size([width - 20, height - 60]);
var root = {},
nodes = tree(root);
root.parent = root;
root.px = root.x;
root.py = root.y;
var diagonal = d3.svg.diagonal();
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(-30,40)");
var node = svg.selectAll(".node"),
link = svg.selectAll(".link");
var duration = 750;
$("#submit_button").click(function() {
update();
});
function update() {
if (nodes.length >= 500) return clearInterval(timer);
//Add a new node to a random parent.
var n = {id: nodes.length},
p = nodes[Math.random() * nodes.length | 0];
if (p.children) p.children.push(n); else p.children = [n];
nodes.push(n);
//Recompute the layout and data join.
node = node.data(tree.nodes(root), function (d) {
return d.id;
});
link = link.data(tree.links(nodes), function (d) {
return d.source.id + "-" + d.target.id;
});
//Add entering nodes in the parent’s old position.
var gelement = node.enter().append("g");
gelement.append("circle")
.attr("class", "node")
.attr("r", 20)
.attr("cx", function (d) {
return d.parent.px;
})
.attr("cy", function (d) {
return d.parent.py;
});
//Add entering links in the parent’s old position.
link.enter().insert("path", ".g.node")
.attr("class", "link")
.attr("d", function (d) {
var o = {x: d.source.px, y: d.source.py};
return diagonal({source: o, target: o});
})
.attr('pointer-events', 'none');
node.on("mouseover", function (d) {
var g = d3.select(this);
g.append("text").html('First Line <br> Second Line')
.classed('info', true)
.attr("x", function (d) {
return (d.x+20);
})
.attr("y", function (d) {
return (d.y);
})
.attr('pointer-events', 'none');
});
node.on("mouseout", function (d) {
d3.select(this).select('text.info').remove();
});
//Transition nodes and links to their new positions.
var t = svg.transition()
.duration(duration);
t.selectAll(".link")
.attr("d", diagonal);
t.selectAll(".node")
.attr("cx", function (d) {
return d.px = d.x;
})
.attr("cy", function (d) {
return d.py = d.y;
});
}
Il ne semble pas que vous êtes en train d'ajouter les balises HTML pour le moment.
J'ai réalisé que. Modification de l' .texte pour .html, le texte pas à tous.
Vous avez besoin d'utiliser foreignObject, voir par exemple bl.ocks.org/mbostock/1424037
Bon, ça fait HTML montrer, merci, mais comment puis-je modifier sa position et de le retirer sur mouseout? .attr("x", function (d) { //return (d.parent.px); return (d.x); }) ne change pas ses coordonnées x et d3.sélectionnez(ce).select('foreignObject').remove(); ne pas l'enlever
Voir, par exemple, d3noob.org/2013/01/adding-tooltips-to-d3js-graph.html

OriginalL'auteur user3853278 | 2014-07-18