天天看點

樹形和仿樹形下拉框

一般來說樹形下拉框是這樣的

樹形和仿樹形下拉框

接收的資料格式是這樣的 id-pid-children模式

樹形和仿樹形下拉框

上面這中資料格式可以這樣子來

var jsonDB = [

                { id: 1, pid: 0, name: "XX公司" },

                { id: 2, pid: 1, name: "人事部" },

                { id: 3, pid: 1, name: "行政部" },

                { id: 4, pid: 1, name: "開發部" },

                { id: 5, pid: 4, name: "開發小組1" },

                { id: 6, pid: 4, name: "開發小組2" },

                { id: 7, pid: 4, name: "開發小組3" },

                { id: 8, pid: 7, name: "開發小組3單小弟" },

                { id: 9, pid: 7, name: "開發小組3單小弟" }

            ];

var data= arrayToTree(jsonDB, "id", "pid")      

 //将ID、ParentID這種資料格式轉換為樹格式

 function arrayToTree(data, id, pid)     

        {

            if (!data || !data.length) return [];

            var targetData = [];                    //存儲資料的容器(傳回)

            var records = {};

            var itemLength = data.length;           //資料集合的個數

            for (var i = 0; i < itemLength; i++) {

                var o = data[i];

                records[o[id]] = o;

            }

            for (var i = 0; i < itemLength; i++) {

                var currentData = data[i];

                var parentData = records[currentData[pid]];

                if (!parentData) {

                    targetData.push(currentData);

                    continue;

                }

                parentData.children = parentData.children || [];

                parentData.children.push(currentData);

            }

            return targetData;

        }

而 仿樹形下拉是這樣的

樹形和仿樹形下拉框

代碼是這樣的,從上面小改一下

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %> <asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">

    <script type="text/javascript">

        $(function () {

            var jsonDB = [

                { id: 1, pid: 0, name: "XX公司" },

                { id: 2, pid: 1, name: "人事部" },

                { id: 3, pid: 1, name: "行政部" },

                { id: 4, pid: 1, name: "開發部" },

                { id: 5, pid: 4, name: "開發小組1" },

                { id: 6, pid: 4, name: "開發小組2" },

                { id: 7, pid: 4, name: "開發小組3" },

                { id: 8, pid: 7, name: "開發小組3單小弟" },

                { id: 9, pid: 7, name: "開發小組3單小弟" }

            ];

            var data1 = [];

            var data2 = arrayToTree(jsonDB, "id", "pid", data1);

            for (var i = 0; i < data1.length; i++)

            {

                $("#demo").append("<option value=\"" + data1[i].id + "\">" + data1[i].name + "</option>");

            }

        });

        //将ID、ParentID這種資料格式轉換為樹格式

        function arrayToTree(data, id, pid,data2) {

            if (!data || !data.length) return [];

            var targetData = [];                    //存儲資料的容器(傳回)

            var records = {};

            var itemLength = data.length;           //資料集合的個數

            for (var i = 0; i < itemLength; i++) {

                var o = data[i];

                records[o[id]] = o;

            }

            for (var i = 0; i < itemLength; i++) {

                var currentData = data[i];

                var parentData = records[currentData[pid]];

                if (!parentData) {

                    currentData["prefix"] = "|--";

                    //alert(currentData["name"]);

                    data2.push(currentData);

                    currentData["name"] = currentData["prefix"] + currentData["name"];

                    targetData.push(currentData);

                    continue;

                }

                currentData["prefix"] = parentData["prefix"] + "|--";

                //alert(currentData["prefix"]);

                parentData.children = parentData.children || [];

                parentData.children.push(currentData);

                currentData["name"] = currentData["prefix"] + currentData["name"];

                data2.push(currentData);

            }

            return targetData;

        }

    </script>     <select id="demo"></select>

</asp:Content>