组织架构树实例

1 篇文章 0 订阅
0 篇文章 0 订阅

数据结构:

var data = {
      "info":"组织层级树",
      "data":[
        {
          "party_id":1,
          "party_name":"组织0",
          "communist":[
            {
              "user_id":1,
              "user_name":"张三",
            }
          ],
          "child":[
            {
              "party_id":2,
              "party_name":"组织0-0",
              "communist":[
                {
                  "user_id":1,
                  "user_name":"陈立夫",
                }
              ],
              "child":[
                {
                  "party_id":1,
                  "party_name":"组织0-0-0",
                  "communist":[
                    {
                      "user_id":4,
                      "user_name":"赵倩0",
                    },
                    {
                      "user_id":4,
                      "user_name":"赵倩1",
                    },
                    {
                      "user_id":4,
                      "user_name":"赵倩2",
                    }
                  ],
                  "child":[],
                },
                {
                  "party_id":1,
                  "party_name":"组织0-0-1",
                  "communist":[
                    {
                      "user_id":1,
                      "user_name":"周天昊0",
                    },
                    {
                      "user_id":1,
                      "user_name":"周天昊1",
                    },
                    {
                      "user_id":1,
                      "user_name":"周天昊2",
                    },
                  ],
                  "child":[],
                }
              ],
            },
            {
              "party_id":1,
              "party_name":"组织0-0-2",
              "communist":[
                {
                  "user_id":1,
                  "user_name":"李昊0",
                },
                {
                  "user_id":1,
                  "user_name":"李昊1",
                },
                {
                  "user_id":1,
                  "user_name":"李昊2",
                },
                {
                  "user_id":1,
                  "user_name":"李昊3",
                },
              ],
              "child":[],
            }
          ],
        }
      ],
    }

html:

<div class="warp">
   <ul id="container">
   </ul>
</div>

css:

ul>li{
         list-style: none;
     }
     ul{
       padding-left: 15px;
     }
       /* 可展开*/
      .switch-open
      {
          margin-left:-12px;
          border:6px solid transparent;
          display:inline-block;
          width:0px;
          height:0px;
          border-top-color: black;

      }
       /* 展开完毕*/
     .switch-close
     {
         margin-left:-12px;
         border:6px solid transparent;
         display:inline-block;
         width:0px;
         height:0px;
         border-left-color: black;
         margin-bottom: 2px;

     }
       /* 改变CheckBox样式*/
     input[type='checkbox']{
         width: 16px;
         height: 16px;
         -webkit-appearance:none;
         -moz-appearance: none;
         border: 1px solid #c9c9c9;
         border-radius: 3px;
         outline: none;
         color:white;
         text-align: center;
         position:relative;
         margin:0px 2px;
     }
     input[type=checkbox]:checked{
       background-color: #e9ecee;
       border: 1px solid #adb8c0;
     }
     input[type=checkbox]:checked:before{
       content: '\2714';
       font-size: 12px;
       position: absolute;
       top: -3px;
       left: 2px;
       color: #99a1a7;
     }

js:

function generate(data,par)
    {
        for(var i = 0;i < data.length;i++)
        {
            var ele=document.createElement('li');
            if(data[i].child.length <= 0){
              ele.innerHTML='<span><span class="switch-close" onclick="toggle(this)"></span><input type="checkbox" onclick="checkChange(this)"></input>'+data[i].party_name+'</span>';
              var html = '';
              for(var j = 0;j < data[i].communist.length;j++){
                html += ' <li><input type="checkbox"></input>'+data[i].communist[j].user_name+'</li>';
              }
              var userBox=document.createElement('ul');
              userBox.innerHTML = html;
              userBox.style.display = 'none';
              ele.appendChild(userBox);
            }else{
                ele.innerHTML='<span><span class="switch-open" onclick="toggle(this)"></span><input type="checkbox" onclick="checkChange(this)"></input>'+data[i].party_name+'</span>';
                var nextpar=document.createElement('ul');
                ele.appendChild(nextpar);
                generate(data[i].child,nextpar);
            }
            par.appendChild(ele);
        }
    }
    generate(data.data,document.getElementById('container'));

    //处理展开和收起
    function toggle(eve)
    {
        var par=eve.parentNode.nextElementSibling;
        if(par.style.display=='none')
        {
            par.style.display='block';
            eve.className='switch-open';
        }else{
            par.style.display='none';
            eve.className='switch-close';
        }
    }

//处理全部勾选和全部不选
    function checkChange(eve)
    {
        var oul=eve.parentNode.nextElementSibling;
        if(eve.checked)
        {
                for(var i=0;i<oul.querySelectorAll('input').length;i++)
                {
                    oul.querySelectorAll('input')[i].checked=true;
                }
        }else{
            for(var i=0;i<oul.querySelectorAll('input').length;i++)
            {
                oul.querySelectorAll('input')[i].checked=false;
            }
        }
    }

效果:

效果图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值