下面代码是ztree的git仓库中3.5版本的noicon.html改造而来。编写了树状数据的生成代码。
数据支持各种类型的,其中在json中如果有json内有map结构,则字符串化时会产生空的{},目前采用的方案是正则替换为缩写,也可以再做递归检测,将map结构转为数组。
代码中含有的重要代码点:
Map类型转数组
struct类型在js中的json形式
object页面显示
object的类型检测
<!DOCTYPE html>
<html>
<head>
<title>ZTREE DEMO - noIcon</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="../../../css/demo.css" type="text/css" />
<link
rel="stylesheet"
href="../../../css/zTreeStyle/zTreeStyle.css"
type="text/css"
/>
<script
type="text/javascript"
src="../../../js/jquery-1.4.4.min.js"
></script>
<script
type="text/javascript"
src="../../../js/jquery.ztree.core.js"
></script>
<!-- <script type="text/javascript" src="../../../js/jquery.ztree.excheck.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.exedit.js"></script>-->
<script type="text/javascript">
var setting = {
view: {
showIcon: false,
},
data: {
simpleData: {
enable: true,
},
},
};
var liMapData = new Map();
liMapData.set("key", "value");
liMapData.set("key1", "value1");
liMapData.set("key2", "value2");
var kvArray = [
["key1", "value1"],
[
"key2",
[
["key1", "value1"],
["key2", "value2"],
],
],
];
var liArrayData = ["2", "3", 4, [2, 3, [3, 5, [5]]]];
var liArrayData2 = ["2", "3", 4, [2, 3, [3, 5, [5]]], liMapData];
var liJsonData = {
// a: 9,
// d: 9,
// c: 9,
b: { a: 9, d: 9, c: 9 ,f:liArrayData2},
e: [1, 2, 3,liArrayData2],
f: liMapData,
e: liArrayData,
k:kvArray
};
function treeDataCreate(preData, parentId) {
var liData = preData;
var pId = parentId;
var treeData = [];
var checkType = Object.prototype.toString.call(liData);
switch (checkType) {
case "[object Object]":
for (var i = 0; i < Object.keys(liData).length; i++) {
if (
Object.prototype.toString.call(
liData[Object.keys(liData)[i]]
) == "[object Map]"
) {
var single = {
id: parentId * 10 + i + 1,
pId: parentId,
name: Object.keys(liData)[i]+":"+JSON.stringify(
Array.from(liData[Object.keys(liData)[i]])
),
};
} else if (
Object.prototype.toString.call(
liData[Object.keys(liData)[i]]
) == "[object Array]"
) {
var single = {
id: parentId * 10 + i + 1,
pId: parentId,
name: Object.keys(liData)[i]+":"+JSON.stringify(liData[Object.keys(liData)[i]]).replace(/{}/,"{...}"),
};
} else {
var single = {
id: parentId * 10 + i + 1,
pId: parentId,
name: Object.keys(liData)[i]+":"+JSON.stringify(liData[Object.keys(liData)[i]]).replace(/{}/,"{...}"),
};
}
// debugger;
treeData.push(single);
if (typeof liData[Object.keys(liData)[i]] == "object") {
console.log(liData[Object.keys(liData)[i]], "***");
treeData = treeData.concat(
treeDataCreate(
liData[Object.keys(liData)[i]],
parentId * 10 + i + 1
)
);
}
}
break;
case "[object Map]":
var i = 0;
liData.forEach(function (value, key) {
if (Object.prototype.toString.call(liData[i]) == "[object Map]") {
// var single = {
// id: parentId * 10 + i + 1,
// pId: parentId,
// name: JSON.stringify(Array.from(liData[i])),
// };
var single = {
id: parentId * 10 + i + 1,
pId: parentId,
name: key + ":" + JSON.stringify(Array.from(value)),
};
} else {
var single = {
id: parentId * 10 + i + 1,
pId: parentId,
name: key + ":" + JSON.stringify(value),
};
}
treeData.push(single);
if (typeof value == "object") {
console.log(value, "***");
treeData = treeData.concat(
treeDataCreate(value, parentId * 10 + i + 1)
);
}
}, liData);
break;
case "[object Array]":
for (var i = 0; i < liData.length; i++) {
if (Object.prototype.toString.call(liData[i]) == "[object Map]") {
var single = {
id: parentId * 10 + i + 1,
pId: parentId,
name: JSON.stringify(Array.from(liData[i])),
};
} else {
var single = {
id: parentId * 10 + i + 1,
pId: parentId,
name: JSON.stringify(liData[i]),
};
}
// debugger;
treeData.push(single);
if (typeof liData[i] == "object") {
console.log(liData[i], "***");
treeData = treeData.concat(
treeDataCreate(liData[i], parentId * 10 + i + 1)
);
}
}
console.log(treeData, "treeData");
break;
default:
treeData.push([{id: 1, pId: 0, name: liData}]);
console.log(treeData, "treeData");
}
console.log(treeData, "treeData");
return treeData;
}
// var treeData = treeDataCreate(liArrayData, 0);
// var treeData = treeDataCreate(liMapData, 0);
// var treeData = treeDataCreate(kvArray, 0);
var treeData = treeDataCreate(liJsonData, 0);
// var treeData ;
console.log(treeData, "treeData");
var zNodes = [
{ id: 1, pId: 0, name: 22 },
{ id: 11, pId: 1, name: 33 },
{ id: 111, pId: 11, name: [1, 2, 3] },
{ id: 112, pId: 11, name: "叶子节点112" },
{ id: 113, pId: 11, name: { 1: 2, 2: 2 } },
{ id: 114, pId: 11, name: "叶子节点114" },
{ id: 12, pId: 1, name: "父节点12 - 折叠" },
{ id: 121, pId: 12, name: "叶子节点121" },
{ id: 122, pId: 12, name: "叶子节点122" },
{ id: 123, pId: 12, name: "叶子节点123" },
{ id: 124, pId: 12, name: "叶子节点124" },
{ id: 13, pId: 1, name: "父节点13 - 没有子节点" },
{ id: 2, pId: 0, name: "父节点2 - 折叠" },
{ id: 21, pId: 2, name: "父节点21 - 展开" },
{ id: 211, pId: 21, name: "叶子节点211" },
{ id: 212, pId: 21, name: "叶子节点212" },
{ id: 213, pId: 21, name: "叶子节点213" },
{ id: 214, pId: 21, name: "叶子节点214" },
{ id: 22, pId: 2, name: "父节点22 - 折叠" },
{ id: 221, pId: 22, name: "叶子节点221" },
{ id: 222, pId: 22, name: "叶子节点222" },
{ id: 223, pId: 22, name: "叶子节点223" },
{ id: 224, pId: 22, name: "叶子节点224" },
{ id: 23, pId: 2, name: "父节点23 - 折叠" },
{ id: 231, pId: 23, name: "叶子节点231" },
{ id: 232, pId: 23, name: "叶子节点232" },
{ id: 233, pId: 23, name: "叶子节点233" },
{ id: 234, pId: 23, name: "叶子节点234" },
{ id: 3, pId: 0, name: "父节点3 - 没有子节点" },
];
$(document).ready(function () {
$.fn.zTree.init($("#treeDemo"), setting, treeData);
});
//-->
</script>
</head>
<body>
<div class="content_wrap">
<div id="treeDemoClose"><button>关闭</button></div>
<div>
<ul id="treeDemo" class="ztree" style="width:500px"></ul>
</div>
</div>
</body>
</html>