jquery动态加载菜单树的问题
从后台获取到的菜单数据是[{"title":"系统管理","parent_id":"10","children_id":"101"},{"title":"用户管理","p...
从后台获取到的菜单数据是[{"title":"系统管理","parent_id":"10","children_id":"101"},{"title":"用户管理","parent_id":"101","children_id":"1011"},{"title":"机构管理","parent_id":"101","children_id":"1012"}],其中系统管理是一级菜单,机构和用户管理是系统管理下的二级菜单,我现在的想法是将菜单数据转换成treeData=[{text:"系统管理",children:[{text:"用户管理".....},{text:"机构管理"....}]}],然后eval(treeData)就行了,现在的问题是,如何转换成treeData,谢谢!
我的方法比较笨,就是字符串拼接,而且还不对,有没有好的方法提供学习下 展开
我的方法比较笨,就是字符串拼接,而且还不对,有没有好的方法提供学习下 展开
2个回答
2016-06-01
展开全部
深度优先,构建目录树
追问
你的意思是先子节点再父节点?
追答
//选个根结点然后构建
function showTree(){
var node = {"title":"系统管理","children_id":"101"};
var data = [{"title":"系统管理","parent_id":"10","children_id":"101"},{"title":"用户管理","parent_id":"101","children_id":"1011"},{"title":"机构管理","parent_id":"101","children_id":"1012"}];
var tree = add2Tree(node,"101",data);
alert("tree: " + JSON.stringify(tree));
}
function add2Tree(node,pid,data){
node.children = new Array();
$.each(data,function(k,v){
if(pid == v.parent_id){
node.children.push(v);
add2Tree(v,v.children_id,data);
}
});
return node;
}
showTree();
意思是 按深度优先遍历 做多级菜单展示,所有菜单肯定有个根节点 root
先查找root的子节点,找到一个添加到他的children中,再找当前这个子节点的子节点,递归查找,直到没有子节点为止。当所有节点都查找后Tree建立完毕
jquery可以直接把json转换成obj,不用eval。
展开全部
第一个json转成数组读出,依据父id和子id重新划分成数组集,写入第二个json treeData
[{'当前节点文本','当前节点id','下级节点id'},{'children_text','selfId','children_id_id'},{...}]
[{'当前节点文本','当前节点id','下级节点id'},{'children_text','selfId','children_id_id'},{...}]
追问
首先谢谢你的回答,“依据父id和子id重新划分成数组集”的意思是父节点作为一个数组,子节点作为一个数组,对吗?
追答
直接写代码
var arrayA = [{"title":"系统管理","parent_id":"10","children_id":"101"},{"title":"用户管理","parent_id":"101","children_id":"1011"},{"title":"机构管理","parent_id":"101","children_id":"1012"}];//后台获取的json
var opIndex = arrayA.length;//获得json长度
var indexId = arrayA[0].parent_id;//获得根栏目id
var str = "";//初始化
var strSub = "";
var strAll = "";
for(var i = 0;i "+arrayA[i].title+"";//用div显示
else
strSub = strSub&""+arrayA[i].title+"";//如果是子栏目,用li显示
end if
}
strAll = str&""&strSub&"";//全部拼接,li要放在ul里面
document.write(strAll);//输出
我想你是要加载个导航栏的某一栏吧,不用弄那么麻烦,获取json直接循环显示即可
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询