最近在利用zTree插件做树型结构,从数据库获得数据进行树型展示,以及树型节点数据保存到数据库.然后用了两个递归,进行折腾.
不过因为数据库思想设计的不同,也请大家只是借鉴一下,不喜勿喷哦!
function subNodes(treeObj, arr, typeName) {
$.each(treeObj, function(index, val){
var is_parent = val.isParent ? 1 : 0
var pid = val.pId ? val.pId : 0
var goal ={sysname:val.name, pid:pid, count_id:val.id, is_parent:is_parent, level:val.level, user_type: val.user_type, type_id: getId(typeName)}
arr.push(goal)
if(val.children){
subNodes(val.children, arr, typeName)
}
})
return arr
}
subNodes方法是把树型结构的节点数据存到数据库里,treeObj是整个数据集合,arr是声明的空数组,typeName是名称,要不要无所谓.
function loadNodes(simpleNodes, count_id) {
var tree = []
var temp
for(var i = 0; i < simpleNodes.length; i++){
if(simpleNodes[i].pid == count_id){
var obj = simpleNodes[i]
obj.name = simpleNodes[i].sysname
temp = loadNodes(simpleNodes, simpleNodes[i].count_id, tree)
if(temp.length > 0){
obj.children = temp
}
tree.push(obj)
}
}
return tree
}
loadNodes方法是把数据库的数据重新整合到页面进行展示,simpleNodes是数据库循环的二位数组,count_id是最小的pid,因为在树型里面必须要有一个最小的pid,或者多个最小的pid,一个树有一个根节点或者多个根节点.