dndTree.js的树视图动态增加节点

本文介绍了如何在基于dndTree.js的树视图中实现动态增加节点的功能。通过示例和代码解析,详细阐述了利用d3.js库进行操作的步骤和技巧。
摘要由CSDN通过智能技术生成
用dndTree.js结合d3.js绘制如下图,通过点击节点动态绘制,增加相关的节点。
动态获取json数据,绘制代码: 
//得到树图json的数据
function get_json(json)
{
treeJSON = d3.json(json, function(error, treeData){
    $("#tree-container").empty();
    root = treeData;
    global_core_config.query = root.w;
    viewerWidth = $(document).width();
    viewerHeight = $(document).height();
    tree = d3.layout.tree()
       .size([viewerHeight, viewerWidth]);
    diagonal = d3.svg.diagonal()
       .projection(function (d) {
           return [d.y, d.x];
       });

    visit(treeData, function (d) {
        totalNodes++;
        if (d.w != undefined)
            maxLabelLength = Math.max(d.w.length, maxLabelLength);
    }, function (d) {
        return d.children && d.children.length > 0 ? d.children : null;
    });

    //sortTree();
    zoomListener = d3.behavior.zoom().scaleExtent([0.1, 3]).on("zoom", zoom);
    baseSvg = d3.select("#tree-container").append("svg")
        .attr("width", viewerWidth * 2)
        .attr("height", viewerHeight * 2)
        .attr("class", "overlay")
        .call(zoomListener);
    svgGroup = baseSvg.append("g");
    root = treeData;
    root.x0 = viewerHeight / 2;
    root.y0 = 0;
    update(root);
    vcenterNode(root);
}
  )
}


点击获取代码:
//点击节点,从后台获取数据填充
function click(d) {
    if (d.a == true)
    {
        var p = d.depth;
        if (p > 0)
        {
            ttid = (d._id == undefined ? d.id : d._id);
            search_core(ttid, 0, 10);
            var l = d.parent;
            global_core_config.query = "";
            for(p=d.depth;p>1;p--)
            {
                global_core_config.query = l.w + global_core_config.query;
                l = l.parent;
            }
            global_core_config.query = global_core_config.query +" "+d.w;
        }
       
    }
    {
        var jsonstr = convertToText(root);;
    }
   
    if (typeof d.children !== 'undefined' || typeof d._children !== 'undefined') {
        d = toggleChildren(d);
        update(d);
    } else {
       
        $.post("find_children.action", $.toJSON({ core: global_core_config.core, query: d._id, style: 0 }), function (result) {
            var findflag = d.a;
            obj = $.parseJSON(result);
            if (obj.children.length == 0)
            {
                return;
            }
            var count = obj.children.length;
            for (var i = 0; i < count; i++) {
                if (obj.children[i].w != obj.w)
                    obj.children[i].w = obj.w + obj.children[i].w;
            }
            var aobj = obj.children;
            aobj.sort(function (a, b) {
                return a.w.localeCompare(b.w);
            });
            var newnodes = tree.nodes(aobj).reverse();
            d.children = newnodes[0];
            update(d);
        });
    }
}
转换树为json字符串,这样绘制的图可以保存为json格式的数据:
function convertToText(obj) {
    var string = [];
    if (obj == undefined) {
        return String(obj);
    } else if (typeof (obj) == "object" && (obj.join == undefined)) {
        for (prop in obj) {
            if (prop == "children" || prop == "_id" || prop == "w" || prop == "a")
            {
                if (obj.hasOwnProperty(prop))
                    string.push("\"" + prop + "\": " + convertToText(obj[prop]));
            }
        };
        return "{" + string.join(",") + "}";
    } else if (typeof (obj) == "object" && !(obj.join == undefined)) {
        for (prop in obj) {
            if (prop == "id" || prop == "depth" || prop == "x" || prop == "x0" || prop == "y" || prop == "y0" || obj[prop]==0)
            {
                continue;
            }
            string.push(convertToText(obj[prop]));
        }
        return "[" + string.join(",") + "]"
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值