zoukankan      html  css  js  c++  java
  • js生成tree形组织机构下拉框

    1.首先我们正常数据是如下所示:
    [
    { id: 1, pid: 0, name: '公司组织' },
    { id: 2, pid: 1, name: '总经办' },
    { id: 3, pid: 1, name: '人事部' },
    { id: 4, pid: 1, name: '生产部' },
    { id: 5, pid: 4, name: '现场组' },
    { id: 6, pid: 4, name: '组装组' },
    ]
     
    2.我们最好在后台组装成json格式数据,如下显示:
    [
    { id: 1, pid: 0, name: '公司组织',
     children:[
       { id: 2, pid: 1, name: '总经办'}
       { id: 3, pid: 1, name: '人事部' }
       { id: 4, pid: 1, name: '生产部' },children:[{ id: 5, pid: 4, name: '现场组' }{ id: 6, pid: 4, name: '组装组' }]},
       ]
    },
    { id: 1, pid: 0, name: '公司组织',
     children:[
       { id: 2, pid: 1, name: '总经办'}
       { id: 3, pid: 1, name: '人事部' }
       { id: 4, pid: 1, name: '生产部' },children:[{ id: 5, pid: 4, name: '现场组' }{ id: 6, pid: 4, name: '组装组' }]},
       ]
    },
    ]
     
    3.后台代码使用递归:
    public string GetOrganizationTreeJson()
            {
                StringBuilder sbResult = new StringBuilder();
                IList<SYS_Organization> orgList = sysPublicService.GetOrganizationList();//获取所有组织机构数据
                if (orgList.Count > 0)
                {
                    sbResult.Append("[{\"id\":0,\"name\": \"组织机构\",\"children\": ");
                    sbResult.Append(CreateOrganizationTreeJsonByModel(orgList, null));
                    sbResult.Append("}]");
                }
                else
                {
                    sbResult.Append("[{\"id\":0,\"name\": \"组织机构\",\"children\": []}]");
                }
                return sbResult.ToString();
            }
    private string CreateOrganizationTreeJsonByModel(IList<SYS_Organization> list, string pId)
            {
                StringBuilder sbResult = new StringBuilder();
                if (list.Count > 0)
                {
                    sbResult.Append("[");
                    IList<SYS_Organization> models = list.Where(m => m._parentId == pId).ToList();
                    if (models.Count > 0)
                    {
                        foreach (SYS_Organization m in models)
                        {
                            sbResult.Append("{\"id\":\"" + m.org_id + "\",\"name\":\"" + m.org_name + "(" + m.org_code + ")\",\"state\":\"open\"");
                            if (list.Count(mm => mm._parentId == m.org_id) > 0)
                            {
                                sbResult.Append(",\"children\":");
                                sbResult.Append(CreateOrganizationTreeJsonByModel(list, m.org_id));
                            }
                            sbResult.Append("},");
                        }
                        sbResult = sbResult.Remove(sbResult.Length - 1, 1);
                    }

                    sbResult.Append("]");
                }

                return sbResult.ToString();
            }
     
    4.在网页中添加下拉框容器
    <select id="selectbox" name=""></select>
     
    5.js脚本,递归生成
    //获取容器对象
    var selectbox=document.getElementById("selectbox");
    //生成树下拉菜单
    var j="-";//前缀符号,用于显示父子关系,这里可以使用其它符号
    function creatSelectTree(d){
     var option="";
     for(var i=0;i<d.length;i++){
     if(d[i].children!= undefined){//如果有子集
      option+="<option value='"+d[i].id+"'>"+j+d[i].name+"</option>";
     j+="-";//前缀符号加一个符号
      option+=creatSelectTree(d[i].children);//递归调用子集
     j=j.slice(0,j.length-1);//每次递归结束返回上级时,前缀符号需要减一个符号
      }else{//没有子集直接显示
      option+="<option value='"+d[i].id+"'>"+j+d[i].name+"</option>";
      }
      }
     return option;//返回最终html结果
     }
    //调用函数,并将结构出入到下拉框容器中
    selectbox.innerHTML=creatSelectTree(tree);
     
    6.页面效果图
     
     
     
     
  • 相关阅读:
    CentOS 7.0关闭默认防火墙启用iptables防火墙
    centos7 启动httpd的时候为什么显示是这样的
    CentOS配置本地yum源/阿里云yum源/163yuan源,并配置yum源的优先级
    Linux如何用yum安装软件或服务
    IE浏览器和Firefox浏览器兼容性问题及解决办法
    Input的size与maxlength属性的区别
    下拉框默认选择数据库取出数据
    登录到 SQL Server 实例
    安装sql server 2008重启失败
    值栈
  • 原文地址:https://www.cnblogs.com/lijl/p/10527470.html
Copyright © 2011-2022 走看看