首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

依据若干条路径把它构造成能生成JQuery的Tree的json数据

2013-07-09 
根据若干条路径把它构造成能生成JQuery的Tree的json数据生成用的json数据为:[{text:sys,state:open

根据若干条路径把它构造成能生成JQuery的Tree的json数据


生成用的json数据为:
[{
"text":"sys",
"state":"open",
"children":[{
"id":"j1",
"text":"aaa",
"children":[
{
"id":"j3",
"text":"ccc"
},
{
"id":"j4",
"text":"ddd"
}
]
},{
"id":"j2",
"text":"bbb",
"children":[
{
"id":"j5",
"text":"ccc",
"children":[{
"id":"j7",
"text":"eee"
}]
},
{
"id":"j6",
"text":"ddd"
}
]
}]
}]


实现如上要求怎么做到?麻烦各位大神指点一二,谢谢 jQuery JSON tree
[解决办法]
实现了你的需求, 不过有了一点点改变——用的是 zTree : http://www.ztree.me/v3/demo.php#_102

zTree算是最简易好用的树吧。

此外用的是里面的 [最简单的树 -- 简单 JSON 数据] —— 只需要 id, pId, name 就好, 没有你搞得那么复杂。

下面的Demo加多了一行数据, 便于测试不规则数据情况。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> 
    <script src="zTree3.5/js/jquery.ztree.core-3.5.min.js"></script>
    <link href="zTree3.5/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" />
    <script type="text/javascript">
        var arr = [
            "/sys",
            "/sys/aaa",


            "/sys/bbb",
            "/sys/aaa/ccc",
            "/sys/aaa/ddd",
            "/sys/bbb/ccc",
            "/sys/bbb/ddd",
            "/sys/bbb/ccc/eee",
            "/sys/aaa/ggg"
        ];
        var oldArr = [];
        //1. 将所有数据以父名称、自己名称、深度3个属性加入到数组
        for (var i=0, len=arr.length;i<len;i++) {
            var nodeArr = arr[i].split("/");
            var obj = { pname: nodeArr[nodeArr.length - 2], name: nodeArr[nodeArr.length - 1], depth: nodeArr.length-1 };
            oldArr.push(obj);
        }
        //排序. 
        //下面的不行, 哪位高手帮忙改改. 不过不排序也没有关系吧。
        //oldArr.sort(function (a, b) {
        //    a.depth > b.depth?1:-1;
        //});
        //for (var i = 0, len = oldArr.length; i < len; i++) {
        //    document.write(oldArr[i].name+""+oldArr[i].depth+"<br>");
        //}
        //2. 依次将所有元素赋上id
        var depth = 0;
        for (var i = 0, len = oldArr.length; i < len; i++) {
            depth++;
            for (var k = 0; k < oldArr.length; k++) {
                if (oldArr[k].depth == depth && typeof (oldArr[k].isFlag) == "undefined") {


                    //查找所有同深度的元素,加1为其id值(前面还要加上深度)
                    var sum = 1;
                    for (var j = 0; j < oldArr.length; j++) {
                        if (oldArr[j].depth == oldArr[k].depth && oldArr[j].isFlag === true) {
                            sum++;
                        }
                    }
                    oldArr[k].id = depth + "_" + sum;
                    oldArr[k].isFlag = true;
                }
            }
        }
        //3. 依次给元素赋上父id
        for (var i = 0, len = oldArr.length; i < len; i++) {
            if (oldArr[i].depth == 1) {
                oldArr[i].pId = "00";
                continue;
            }
            for (var j = 0; j < oldArr.length; j++) {
                if (oldArr[j].depth+1 == oldArr[i].depth && oldArr[j].name == oldArr[i].pname) {
                    oldArr[i].pId = oldArr[j].id;


                }
            }
        }
        //---------------------- zTree 设置与初始化 --------------------------
        var setting = {
            data: {
                simpleData: {
                    enable: true
                }
            }
        };
        $(function () {
            $.fn.zTree.init($("#treeDemo"), setting, oldArr);
        });
    </script>
</head>
<body>
    <div alt="依据若干条路径把它构造成能生成JQuery的Tree的json数据" />

热点排行