码迷,mamicode.com
首页 > 其他好文 > 详细

简单树

时间:2019-10-31 16:36:30      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:children   存在   this   border   html   简单   其它   back   fun   

<!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>

 

简单树

标签:children   存在   this   border   html   简单   其它   back   fun   

原文地址:https://www.cnblogs.com/littleboyck/p/11771677.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!