d3.js根节点“名称”标签onclick pop jquery对话框

时间:2014-02-28 00:37:28

标签: jquery d3.js jquery-dialog

所以这就是我想要做的...... 考虑下面的树结构:

var root = {
                    "name"    : "Total1 : " + mynum ,
                    "size"    : 50000,
                    "children": [{
                          "name":"Total2" + num1
                      },
                      {
                          "name":"Total3" + num2
                      },
                      {
                          "name":"Total4" + num3
                      },
                      {
                          "name":"Total5" + num4
                      }

                    ]
                };

每一个"名称"标签,我想要一个任何标签的按钮,当点击弹出打开一个jquery对话框。我无法理解如何这样做,因为这显然不起作用

"name" : "my text" + mynum + "<div id="xyz">Click</div>"

我正在寻找一些东西,通过它我可以识别点击,获取节点id,并进行ajax调用以获取查询并在jquery对话框中显示。 或者可以在右键单击节点时提示选项,以显示查询。

我很感激这些人的任何帮助。谢谢你的推荐

这是我的整个javascript代码:

$(document).ready( function() {

      var margin = {
          top: 20,
          right: 120,
          bottom: 20,
          left: 120
      },
      width = 960 - margin.right - margin.left,
      height = 800 - margin.top - margin.bottom;

      var root = {
                    "name"    : "Total1 : " + mynum ,
                    "size"    : 50000,
                    "children": [{
                          "name":"Total2" + num1
                      },
                      {
                          "name":"Total3" + num2
                      },
                      {
                          "name":"Total4" + num3
                      },
                      {
                          "name":"Total5" + num4
                      }

                    ]
                };

      var i = 0,
          duration = 750,
          rectW = 200,
          rectH = 30;

      var tree = d3.layout.tree().nodeSize([rectW + 10, rectH + 10]);
      var diagonal = d3.svg.diagonal()
          .projection(function (d) {
          return [d.x + rectW / 2, d.y + rectH / 2];
      });

      var svg = d3.select("#body").append("svg").attr("width", 2000).attr("height", 2000)
          .call(zm = d3.behavior.zoom().scaleExtent([1,3]).on("zoom", redraw)).append("g")
          .attr("transform", "translate(" + 350 + "," + 20 + ")");

      //necessary so that zoom knows where to zoom and unzoom from
      zm.translate([350, 20]);

      root.x0 = 0;
      root.y0 = height / 2;


      root.children.forEach(collapse);
      update(root);

      d3.select("#body").style("height", "800px");



    function collapse(d) {
        if (d.children) {
            d._children = d.children;
            d._children.forEach(collapse);
            d.children = null;
        }
    }

    function update(source) {

        // Compute the new tree layout.
        var nodes = tree.nodes(root).reverse(),
            links = tree.links(nodes);

        // Normalize for fixed-depth.
        nodes.forEach(function (d) {
            d.y = d.depth * 180;
        });

        // Update the nodes…
        var node = svg.selectAll("g.node")
            .data(nodes, function (d) {
            return d.id || (d.id = ++i);
        });

        // Enter any new nodes at the parent's previous position.
        var nodeEnter = node.enter().append("g")
            .attr("class", "node")
            .attr("transform", function (d) {
            return "translate(" + source.x0 + "," + source.y0 + ")";
        })
            .on("click", click);

        nodeEnter.append("rect")
            .attr("width", rectW)
            .attr("height", rectH)
            .attr("stroke", "black")
            .attr("stroke-width", 1)
            .style("fill", function (d) {
            return d._children ? "lightsteelblue" : "#fff";
        });

        nodeEnter.append("text")
            .attr("x", rectW / 2)
            .attr("y", rectH / 2)
            .attr("dy", ".35em")
            .attr("text-anchor", "middle")
            .text(function (d) {
            return d.name;
        });

        // Transition nodes to their new position.
        var nodeUpdate = node.transition()
            .duration(duration)
            .attr("transform", function (d) {
            return "translate(" + d.x + "," + d.y + ")";
        });

        nodeUpdate.select("rect")
            .attr("width", rectW)
            .attr("height", rectH)
            .attr("stroke", "black")
            .attr("stroke-width", 1)
            .style("fill", function (d) {
            return d._children ? "lightsteelblue" : "#fff";
        });

        nodeUpdate.select("text")
            .style("fill-opacity", 1);

        // Transition exiting nodes to the parent's new position.
        var nodeExit = node.exit().transition()
            .duration(duration)
            .attr("transform", function (d) {
            return "translate(" + source.x + "," + source.y + ")";
        })
            .remove();

        nodeExit.select("rect")
            .attr("width", rectW)
            .attr("height", rectH)
        //.attr("width", bbox.getBBox().width)""
        //.attr("height", bbox.getBBox().height)
        .attr("stroke", "black")
            .attr("stroke-width", 1);

        nodeExit.select("text");

        // Update the links…
        var link = svg.selectAll("path.link")
            .data(links, function (d) {
            return d.target.id;
        });

        // Enter any new links at the parent's previous position.
        link.enter().insert("path", "g")
            .attr("class", "link")
            .attr("x", rectW / 2)
            .attr("y", rectH / 2)
            .attr("d", function (d) {
            var o = {
                x: source.x0,
                y: source.y0
            };
            return diagonal({
                source: o,
                target: o
            });
        });

        // Transition links to their new position.
        link.transition()
            .duration(duration)
            .attr("d", diagonal);

        // Transition exiting nodes to the parent's new position.
        link.exit().transition()
            .duration(duration)
            .attr("d", function (d) {
            var o = {
                x: source.x,
                y: source.y
            };
            return diagonal({
                source: o,
                target: o
            });
        })
            .remove();

        // Stash the old positions for transition.
        nodes.forEach(function (d) {
            d.x0 = d.x;
            d.y0 = d.y;
        });
    }

    // Toggle children on click.
    function click(d) {
        if (d.children) {
            d._children = d.children;
            d.children = null;
        } else {
            d.children = d._children;
            d._children = null;
        }
        update(d);
    }

    //Redraw for zoom
    function redraw() {
      //console.log("here", d3.event.translate, d3.event.scale);
      svg.attr("transform",
          "translate(" + d3.event.translate + ")"
          + " scale(" + d3.event.scale + ")");
    }
  });

1 个答案:

答案 0 :(得分:1)

好吧,我找到了解决方法,我向所有节点输入了右键单击事件oncontextmenu。所以现在当我右键单击时,我会弹出jquery对话框。