根据若干条路径把它构造成能生成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数据" />