zoukankan      html  css  js  c++  java
  • 简单树

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <style>
                #aside .aside-content>ul ul{
                    display: none;
                }
            </style>
        </head>
        <body>
            <div id="aside" style="padding: 20px;border: 1px solid;">
                <div class="aside-scroll" style="padding: 20px;border: 1px solid;">
                    <div class="aside-content" style="padding: 20px;border: 1px solid;">
                    </div>
                </div>
            </div>
            <script type="text/javascript" src="js/jquery-2.1.1.min.js" ></script>
            <script>
                
                //也可以单独提取到json文件中,通过get方式ajax读取
                var nodes =[
                    { id:1, pId:0, name:"随意勾选 1"},
                    { id:11, pId:1, name:"随意勾选 1-1"},
                    { id:111, pId:11, name:"随意勾选 1-1-1"},
                    { id:112, pId:11, name:"随意勾选 1-1-2", checked:true},
                    { id:12, pId:1, name:"随意勾选 1-2"},
                    { id:121, pId:12, name:"随意勾选 1-2-1"},
                    { id:122, pId:12, name:"随意勾选 1-2-2"},
                    { id:2, pId:0, name:"随意勾选 2"},
                    { id:21, pId:2, name:"随意勾选 2-1"},
                    { id:22, pId:2, name:"随意勾选 2-2"},
                    { id:221, pId:22, name:"随意勾选 2-2-1", checked:true},
                    { id:222, pId:22, name:"随意勾选 2-2-2"},
                    { id:23, pId:2, name:"随意勾选 2-3"}
                ];
                
                //简单节点树,转为父子children节点树
                simpleRevComplexData = function(nodes){
                    var nodePoint = {};
                    for(var i in nodes){
                        nodePoint[nodes[i].id] = nodes[i];
                    }
                    console.log(nodePoint)
                    var node = [];
                    for(var i in nodes){
                        if(nodes[i].pId in nodePoint){//if(nodePoint[nodes[i].pId])
                            (nodePoint[nodes[i].pId].children || (nodePoint[nodes[i].pId].children = [])).push(nodes[i]);
                        }else{//不在则是顶级节点
                            node.push(nodes[i]);
                        }
                    }
                    return node;
                };
                
                console.log(simpleRevComplexData)
                
                //递归渲染
                function renderList(data,showArea){
                    if(data.length){
                        var $ul = $('<ul></ul>');
                        for(var i in data){
                            var $li = $('<li><span node-id="'+data[i].id+'">'+data[i].name+'</span></li>');
                            $ul.append($li);
                            if(data[i].children && data[i].children.length>0){
                                renderList(data[i].children,$li);
                            }
                        }
                        showArea.append($ul);
                    }
                };
                
                //改用on监听动态添加的节点
                $('#aside .aside-content').on('click','span',function(){
                    var $this = $(this);
                    //ul是否可见
                    if($this.next().is(":visible")){
                        $this.next().hide();
                    }else{
                        //判读ul是否存在
                        var $ul = $this.next().size()? $this.next().show():$this;
                        //隐藏其它兄弟元素
                        $ul.closest('li').siblings().find('ul').hide();
                    }
                });
                
                
                //方法调用
                var nodes = simpleRevComplexData(nodes);
                
                renderList(nodes,$("#aside").find('.aside-content'));
                
            </script>
        </body>
    </html>
  • 相关阅读:
    模态对话框
    js小练习题
    js练习题
    python实现不同格式九九乘法表
    Python学习笔记之疑问12:什么是tuple
    Python学习笔记之疑问11:批量赋值
    Python学习笔记之疑问10:如何使用分隔符连接list中的字符串
    Python学习笔记之疑问 9:如何使用For语句
    Python学习笔记之疑问 8:Python 中的问号表达式
    Python学习笔记之疑问 7:自定义模块放在什么位置
  • 原文地址:https://www.cnblogs.com/littleboyck/p/11771677.html
Copyright © 2011-2022 走看看