javascript实现动态加载树形菜单(tree),

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript实现动态加载树形菜单(tree),相关的知识,希望对你有一定的参考价值。

需要实现的效果是 从mysql数据库读取数据生成动态数据菜单,异步加载,点击某节点可在右边显示当前内容,目前已经使用simpletree来做,但是发现需要json数据,但是又不知道怎么在页面上获取在json文件中自定义的属性值,所以有高人解答,最好是能有一个例子 email:pastime@Live.cn 谢谢 如果实现再加50分

页面既然得到从服务器传过来的json数据之后,还要转换为Object
比如,服务器组装好的json数据:

id:'001',
nodeMsg:'节点1'

这个是ajax成功之后的回调
function(xhr)
var o = eval('(' + xhr.responseText + ')');
alert(o.id + ':' + o.nodeMsg);
参考技术A 简单说下,希望能引导你,json数据如"name":"aaa"
var ob=val(json_data)使用ob.name就可以获取,首先理解json产生的意义,就是为了方便转换成js对象,你看看相关的资料吧
参考技术B 学习一下

EasyUI 树形菜单加载父/子节点

通常表示一个树节点的方式就是在每一个节点存储一个 parentid。 这个也被称为邻接列表模型。 直接加载这些数据到树形菜单(Tree)是不允许的。 但是我们可以在加载树形菜单之前,把它转换为标准标准的树形菜单(Tree)数据格式。 树(Tree)插件提供一个 ‘loadFilter‘ 选项函数,它可以实现这个功能。 它提供一个机会来改变任何一个进入数据。 本教程向您展示如何使用 ‘loadFilter‘ 函数加载父/子节点到树形菜单(Tree)。

技术分享图片

父/子节点数据

    [
    {"id":1,"parendId":0,"name":"Foods"},
    {"id":2,"parentId":1,"name":"Fruits"},
    {"id":3,"parentId":1,"name":"Vegetables"},
    {"id":4,"parentId":2,"name":"apple"},
    {"id":5,"parentId":2,"name":"orange"},
    {"id":6,"parentId":3,"name":"tomato"},
    {"id":7,"parentId":3,"name":"carrot"},
    {"id":8,"parentId":3,"name":"cabbage"},
    {"id":9,"parentId":3,"name":"potato"},
    {"id":10,"parentId":3,"name":"lettuce"}
    ]

使用 ‘loadFilter‘ 创建树形菜单(Tree)

    $(‘#tt‘).tree({
        url: ‘data/tree6_data.json‘,
        loadFilter: function(rows){
            return convert(rows);
        }
    });

转换的实现

    function convert(rows){
        function exists(rows, parentId){
            for(var i=0; i<rows.length; i++){
                if (rows[i].id == parentId) return true;
            }
            return false;
        }
        
        var nodes = [];
        // get the top level nodes
        for(var i=0; i<rows.length; i++){
            var row = rows[i];
            if (!exists(rows, row.parentId)){
                nodes.push({
                    id:row.id,
                    text:row.name
                });
            }
        }
        
        var toDo = [];
        for(var i=0; i<nodes.length; i++){
            toDo.push(nodes[i]);
        }
        while(toDo.length){
            var node = toDo.shift();    // the parent node
            // get the children nodes
            for(var i=0; i<rows.length; i++){
                var row = rows[i];
                if (row.parentId == node.id){
                    var child = {id:row.id,text:row.name};
                    if (node.children){
                        node.children.push(child);
                    } else {
                        node.children = [child];
                    }
                    toDo.push(child);
                }
            }
        }
        return nodes;
    }

 

技术分享图片

原文地址:http://www.jeasyui.net/tutorial/57.html 很实用

以上是关于javascript实现动态加载树形菜单(tree),的主要内容,如果未能解决你的问题,请参考以下文章

EasyUI创建异步树形菜单和动态添加tab页面

java如何实现二级树形菜单动态显示。要求加载页面时显示一级,点击一级菜单再去数据库查找出二级菜单

关于jquery tree 树形菜单动态添加子节点的问题

jQuery+zTree加载树形结构菜单

动态树形菜单的几种递归写法小结

jQuery+zTree加载树形结构菜单