var data = [
{"id":1},
{"id":2},
{"id":3},
{"id":4},
];
var str="<ul>";
data.forEach(function(v,i){
str+="<li><span>"+v.id+"</span></li>"
})
str="</ul>"
$(doucment).append(str);
var data2 = [
{"id":1,children:[{"id":"child11"},{"id":"child12"}]},
{"id":2},
{"id":3children:[{"id":"child31"},{"id":"child32"}]},
{"id":4},
];
var str="<ul>";
data2.forEach(function(v,i){
if(v.children&&v.children.length>0){
str+="<li><span>"+v.id+"</span>";
str+="<ul>";
v.children.forEach(function(value,index){
str+="<li><span>"+value.id+"</span>";
})
str="</ul>";
str="</li>";
}else{
str+="<li><span>"+v.id+"</span></li>"
}
})
str="</ul>"
$(doucment).append(str);
var json=[
{
name:123,id:1
children:[
{
name:453,id:456,children:[{name:789,id:777,children:[{name:"hahahqqq---qq",id:3232,children:[name:'son',id:"13132123211"]}]}]
},
{
name:"Cessihshis" , id:12121
}
]
},
{
name:"啊啊啊11", id:12
},
];
function render(treeJson){
if(!Array.isArray(treeJson)||treeJson.length<=0){return ""}
var ul=$("<ul>");
treeJson.forEach(function(item,i){
var li=$("<li><span class='treeName'>"+item.name+"</span></li>");
if(Array.isArray(item.children)&&item.children.length>0){
li.append(render(item.children))
}
ul.append(li);
})
return ul
}
$(document).append(render(json));
var checkbox={
radio:"<label class='myTreeIcon'><input type='radio' name='selectTreeRedio'><span></span></label>",
multi:"<input type='checkbox' name='selectTreeRedio'>"
}
function render(treeJson,option={type:0,expandDom:function(){}}){
if(!Array.isArray(treeJson)||treeJson.length<=0){return ""}
var {type,expandDom}=option;
var ul=$("<ul>");
treeJson.forEach(function(item,i){
var str="";
if(type==1){
str+=checkbox.multi
}else if(type==2){
str+=checkbox.radio
}
var li=$("<li data-id='"+item+"'>"+str+"<span class='treeName'>"+item.name+"</span></li>");
expandDom&&expandDom(li,item);
if(item.children&&item.children.length>0){
li.append(render(item.children,option))
}
ul.append(li);
})
return ul
}
//option使用了一个默认对象,默认为不需要选择框和不需要拓展, 如果传入的type为1或者2,则生成checkbox或者radio,由于radio样式比较丑,用label包起来自己模拟选中的效果;如果传入拓展参数,则把当前的父级li以及当前的参数传入,以便进行拓展。
$("#tree").append(render(json,{
type:1,
expandDom:function(el,data){
el.append("<button>编辑</button><button>测试</button><a data-msg='"+JSON.stringify(data)+"'></a>")
}
}))
var data = [
{"id":2,"name":"第一级1","pid":0},
{"id":3,"name":"第二级1","pid":2},
{"id":5,"name":"第三级1","pid":4},
{"id":100,"name":"第三级2","pid":3},
{"id":6,"name":"第三级2","pid":3},
{"id":601,"name":"第三级2","pid":6},
{"id":602,"name":"第三级2","pid":6},
{"id":603,"name":"第三级2","pid":6}
];
为了用递归来渲染出树来,这时,就需要我们手动来将层级装好了:
function arrayToJson(treeArray){
var r = [];
var tmpMap ={};
for (var i=0, l=treeArray.length; i<l; i++) {
// 以每条数据的id作为obj的key值,数据作为value值存入到一个临时对象里面
tmpMap[treeArray[i]["id"]]= treeArray[i];
}
for (i=0, l=treeArray.length; i<l; i++) {
var key=tmpMap[treeArray[i]["pid"]];
//循环每一条数据的pid,假如这个临时对象有这个key值,就代表这个key对应的数据有children,需要Push进去
if (key) {
if (!key["children"]){
key["children"] = [];
key["children"].push(treeArray[i]);
}else{
key["children"].push(treeArray[i]);
}
} else {
//如果没有这个Key值,那就代表没有父级,直接放在最外层
r.push(treeArray[i]);
}
}
return r
}
var jsonToArray=function (nodes) {
var r=[];
if (Array.isArray(nodes)) {
for (var i=0, l=nodes.length; i<l; i++) {
r.push(nodes[i]);
if (Array.isArray(nodes[i]["children"])&&nodes[i]["children"].length>0)
//将children递归的push到最外层的数组r里面
r = r.concat(jsonToArray(nodes[i]["children"]));
delete nodes[i]["children"]
}
}
return r;
}
function deepCopy(obj){
var object;
if(Object.prototype.toString.call(obj)=="[object Array]"){
object=[];
for(var i=0;i<obj.length;i++){
object.push(deepCopy(obj[i]))
}
return object
}
if(Object.prototype.toString.call(obj)=="[object Object]"){
object={};
for(var p in obj){
object[p]=obj[p]
}
return object
}
}
jsonToArray(deepCopy(data));
arrayToJson(deepCopy(data)):
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有