簡體   English   中英

D3將HTML附加到節點

[英]D3 Appending HTML to Nodes

我已經找到了答案,但在我的情況下,沒有類似的問題可以幫助我。 我有一個D3樹,在運行時創建新的節點。 當我將鼠標懸停在特定節點上時,我想將HTML(因此我可以格式化)添加到節點。 現在我可以添加HTML但它沒有格式化。 請幫忙!

JSFiddle: http//jsfiddle.net/Srx7z/

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;
                });
    }

使用Lars Kotthoff的優秀方向,我得到了它的工作,所以我決定將它發布給其他人和我自己的參考:

http://jsfiddle.net/FV4rL/2/

附加以下代碼:

node.on("mouseover", function (d) {
            var g = d3.select(this); // The node
            var div = d3.select("body").append("div")
                    .attr('pointer-events', 'none')
                    .attr("class", "tooltip")
                    .style("opacity", 1)
                    .html("FIRST LINE <br> SECOND LINE")
                    .style("left", (d.x + 50 + "px"))
                    .style("top", (d.y +"px"));
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM