87,992
社区成员
发帖
与我相关
我的任务
分享var zNodes=[
{id:1,pId:0;name:"A"},
{id:11,pId:1;name:"A1"},
{id:12,pId:1;name:"A2"},
{id:13,pId:1;name:"A3"},
{id:2,pId:0;name:"B"},
{id:21,pId:2;name:"B1"},
{id:22,pId:2;name:"B2"},
{id:23,pId:2;name:"B3"},
{id:3,pId:0;name:"C"},
{id:31,pId:3;name:"C1"},
{id:32,pId:3;name:"C2"},
{id:33,pId:3;name:"C3"}
],pID如果等于id,那么前者就是后者的子节点;
<ul>
<li><a href="#">A</a>
<ul>
<li><a href="#">A</a></li>
<li><a href="#">A</a></li>
<li><a href="#">A</a></li>
</ul>
</li>
<li><a href="#">B</a>
<ul>
<li><a href="#">B</a></li>
<li><a href="#">B</a></li>
<li><a href="#">B</a></li>
</ul>
</li>
<li><a href="#">C</a>
<ul>
<li><a href="#">C</a></li>
<li><a href="#">C</a></li>
<li><a href="#">C</a></li>
</ul>
</li>
</ul>
,每个节点都要不确定的子孙节点,各位哥哥,怎么用js实现?group:function(){
for(var i=0;i<this.tree.length;i++){
this.groups[this.tree[i].pId]=this.groups[this.tree[i].pId]||[];
this.groups[this.tree[i].pId].push(this.tree[i]);
}
},
var zNodes=[
{id:1,pId:0,name:"A"},
{id:11,pId:1,name:"A1"},
{id:12,pId:1,name:"A2"},
{id:13,pId:1,name:"A3"},
{id:2,pId:0,name:"B"},
{id:21,pId:2,name:"B1"},
{id:22,pId:2,name:"B2"},
{id:23,pId:2,name:"B3"},
{id:3,pId:0,name:"C"},
{id:31,pId:3,name:"C1"},
{id:32,pId:3,name:"C2"},
{id:33,pId:3,name:"C3"},
{id:34,pId:31,name:"x"},
{id:35,pId:31,name:"y"},
{id:36,pId:31,name:"z"}
];
function treeMenu(a){
this.tree=a||[];
this.groups={};
};
treeMenu.prototype={
init:function(pid){
this.group();
return this.getDom(this.groups[pid]);
},
group:function(){
for(var i=0;i<this.tree.length;i++){
if(this.groups[this.tree[i].pId]){
this.groups[this.tree[i].pId].push(this.tree[i]);
}else{
this.groups[this.tree[i].pId]=[];
this.groups[this.tree[i].pId].push(this.tree[i]);
}
}
},
getDom:function(a){
if(!a){return ''}
var html='\n<ul>\n';
for(var i=0;i<a.length;i++){
html+='<li><a href="#">'+a[i].name+'</a>';
html+=this.getDom(this.groups[a[i].id]);
html+='</li>\n';
};
html+='</ul>\n';
return html;
}
};
var html=new treeMenu(zNodes).init(0);
alert(html);var zNodes=[
{id:1,pId:0,name:"A"},
{id:11,pId:1,name:"A1"},
{id:12,pId:1,name:"A2"},
{id:13,pId:1,name:"A3"},
{id:2,pId:0,name:"B"},
{id:21,pId:2,name:"B1"},
{id:22,pId:2,name:"B2"},
{id:23,pId:2,name:"B3"},
{id:3,pId:0,name:"C"},
{id:31,pId:3,name:"C1"},
{id:32,pId:3,name:"C2"},
{id:33,pId:3,name:"C3"},
{id:34,pId:31,name:"x"},
{id:35,pId:31,name:"y"},
{id:36,pId:31,name:"z"}
];
function treeMenu(a){
this.tree=a||[];
};
treeMenu.prototype={
init:function(pid){
return this.getDom(this.grep(pid));
},
grep:function(pid){
if(this.tree.length==0){return []}
var arr=[];
for(var i=0;i<this.tree.length;i++){
if(this.tree[i].pId==pid){
arr.push(this.tree[i]);
}
};
return arr;
},
getDom:function(a){
if(a.length==0){return ''}
var html='\n<ul>\n';
for(var i=0;i<a.length;i++){
html+='<li><a href="#">'+a[i].name+'</a>';
html+=this.getDom(this.grep(a[i].id));
html+='</li>\n';
};
html+='</ul>\n';
return html;
}
};
var html=new treeMenu(zNodes).init(0);
alert(html);
<ul id="result"></ul>
window.onload = function () {
var zNodes = [{ id: 1, pId: 0, name: "A" }, { id: 11, pId: 1, name: "A1" }, { id: 12, pId: 1, name: "A2" }, { id: 13, pId: 1, name: "A3" },
{ id: 2, pId: 0, name: "B" }, { id: 21, pId: 2, name: "B1" }, { id: 22, pId: 2, name: "B2" }, { id: 23, pId: 2, name: "B3" },
{ id: 3, pId: 0, name: "C" }, { id: 31, pId: 3, name: "C1" }, { id: 32, pId: 3, name: "C2" }, { id: 33, pId: 3, name: "C3"}];
var j = eval(zNodes);
var cNode = "";
for (var i = 0, len = j.length; i < len; i++) {
if (j[i].pId == "0") { //追加根节点
if (cNode.length > 0) {
$("#" + j[i-1].pId).append('<ul>' + cNode + '</ul>');
cNode = "";
}
$("#result").append('<li id=' + j[i].id + '><a href="#">' + j[i].name + '</a>');
}
else { //追加子节点
cNode += '<li><a href="#">' + j[i].name + '</a></li>';
}
}
}