1. 程式人生 > >把tree結構資料轉換easyui的columns

把tree結構資料轉換easyui的columns

很多時候我們的datagrid需要動態的列顯示,那麼這個時候我們後臺一般提供最直觀的資料格式tree結構。那麼需要我們前端自己根據這個tree結構轉換成easyui的datagrid的columns。那麼經過跟後臺大神(陳漢軍)同事一起的研究最後我整理了一個下面的函式來提供轉換。

 

/*
*@author:yeminglong
*@date:2018/06/22
*@email:[email protected]
*@description:把treeNOde轉換成easyui的datagrid或者treegrid的columns
*用法:
* var treeNode=[{text:"節點1",value:"myName","children";[{
                        "text": "ziduan51",
                        "value": "ziduan51",
                        "children": []
                    }]}];
* var columns= treeToColumns(treeNode);
*原理:先把treeNode的level計算出來,然後獲取最大的maxLevel。
*跨行公式=maxLevel-currentNode.level+1;
*跨列公式=currentNode的children的childrenNode的children的length的和。
*感謝:陳漢軍同學為本函式提供演算法參考。本文的演算法來自 陳漢軍 同學的指導。再次感謝。
*/ (function (wd) { var allLevel = [0], maxLevel = 0, columns = []; //獲取最大層級 function getMaxLevel(allLevel) { return Math.max.apply(null, allLevel); } //把資料結構轉換成自己需要的基本屬性 function convert(nodes, parentNode) { for (var i = 0; i < nodes.length; i++) {
var node = nodes[i]; if (!parentNode) { node.level = 0; } else { node.level = parentNode.level + 1; allLevel.push(node.level); } if (node.children.length > 0) { node.cp = node.children.length; convert(node.children, node); }
else { node.cp = 1; } } return nodes; } //獲取跨列 function getCospan(node) { var colspan = 0; for (var j = 0; j < node.children.length; j++) { colspan += node.children[j].cp; } return colspan; } //開始轉換 function convert2(nodes, parentNode) { for (var i = 0; i < nodes.length; i++) { var node = nodes[i]; if (!columns[node.level]) { columns[node.level] = []; } if (node.children.length > 0) { columns[node.level].push({ field: node.value, title: node.text, rowspan: 1, colspan: getCospan(node), width: 200, align: 'center' }); convert2(node.children, node); } else { columns[node.level].push({ field: node.value, title: node.text, rowspan: (maxLevel - node.level + 1), colspan: 1, width: 200, align: 'center' }); } } return columns; } //提供給外面的全域性函式 wd.treeToColumns = function (treeNode) { allLevel = [0], maxLevel = 0, columns = []; var node2 = convert(treeNode, null); maxLevel = getMaxLevel(allLevel); console.log(maxLevel); columns = convert2(node2); // console.log(JSON.stringify(columns)); return columns; } })(window);
View Code

 

 

 

 用法示例:

 

var gridTitle = [
    {
        "text": "ziduan1",
        "value": "ziduan1",
        "children": [
            {
                "text": "ziduan11",
                "value": "ziduan11",
                "children": [
                    {
                        "text": "ziduan51",
                        "value": "ziduan51",
                        "children": []
                    },
                    {
                        "text": "ziduan52",
                        "value": "ziduan52",
                        "children": []
                    },
                    {
                        "text": "ziduan53",
                        "value": "ziduan53",
                        "children": []
                    },
                    {
                        "text": "ziduan54",
                        "value": "ziduan54",
                        "children": []
                    },
                    {
                        "text": "ziduan55",
                        "value": "ziduan55",
                        "children": []
                    }
                ]
            },
            {
                "text": "ziduan12",
                "value": "ziduan12",
                "children": []
            },
            {
                "text": "ziduan13",
                "value": "ziduan13",
                "children": []
            },
            {
                "text": "ziduan14",
                "value": "ziduan14",
                "children": []
            },
            {
                "text": "ziduan15",
                "value": "ziduan15",
                "children": []
            }
        ]
    },
    {
        "text": "ziduan2",
        "value": "ziduan2",
        "children": [
            {
                "text": "ziduan21",
                "value": "ziduan21",
                "children": []
            },
            {
                "text": "ziduan22",
                "value": "ziduan22",
                "children": []
            },
            {
                "text": "ziduan23",
                "value": "ziduan23",
                "children": []
            },
            {
                "text": "ziduan24",
                "value": "ziduan24",
                "children": []
            },
            {
                "text": "ziduan25",
                "value": "ziduan25",
                "children": []
            }
        ]
    },
    {
        "text": "ziduan3",
        "value": "ziduan3",
        "children": [
            {
                "text": "ziduan31",
                "value": "ziduan31",
                "children": []
            },
            {
                "text": "ziduan32",
                "value": "ziduan32",
                "children": []
            },
            {
                "text": "ziduan33",
                "value": "ziduan33",
                "children": []
            },
            {
                "text": "ziduan34",
                "value": "ziduan34",
                "children": []
            },
            {
                "text": "ziduan35",
                "value": "ziduan35",
                "children": []
            }
        ]
    },
    {
        "text": "ziduan4",
        "value": "ziduan4",
        "children": [
            {
                "text": "ziduan41",
                "value": "ziduan41",
                "children": []
            },
            {
                "text": "ziduan42",
                "value": "ziduan42",
                "children": []
            },
            {
                "text": "ziduan43",
                "value": "ziduan43",
                "children": []
            },
            {
                "text": "ziduan44",
                "value": "ziduan44",
                "children": []
            },
            {
                "text": "ziduan45",
                "value": "ziduan45",
                "children": []
            },
        ]
    },
    {
        "text": "ziduan5",
        "value": "ziduan5",
        "children": [
            {
                "text": "ziduan46",
                "value": "ziduan46",
                "children": []
            },
            {
                "text": "ziduan47",
                "value": "ziduan47",
                "children": [

                    {
                        "text": "ziduan56",
                        "value": "ziduan56",
                        "children": []
                    },
                    {
                        "text": "ziduan57",
                        "value": "ziduan57",
                        "children": []
                    },
                    {
                        "text": "ziduan58",
                        "value": "ziduan58",
                        "children": []
                    },
                    {
                        "text": "ziduan59",
                        "value": "ziduan59",
                        "children": []
                    },
                    {
                        "text": "ziduan60",
                        "value": "ziduan60",
                        "children": []
                    }
                ]
            },
            {
                "text": "ziduan48",
                "value": "ziduan48",
                "children": []
            },
            {
                "text": "ziduan49",
                "value": "ziduan49",
                "children": []
            },
            {
                "text": "ziduan50",
                "value": "ziduan50",
                "children": []
            }
        ]
    },
    {
        "text": "ziduan77",
        "value": "ziduan77",
        "children": [
            {
                "text": "ziduan78",
                "value": "ziduan78",
                "children": []
            }
        ]
    },
    {
        "text": "ziduan79",
        "value": "ziduan79",
        "children": [
            {
                "text": "ziduan80",
                "value": "ziduan80",
                "children": [{
                    "text": "ziduan81",
                    "value": "ziduan81",
                    "children": []
                }]
            }
        ]
    }

];
View Code

 

var columns=treeToColumns(gridTitle);
$('#div1').datagrid({
    fit: true,
    columns: columns
})

 

 

 

 

 

如果這篇文章對您有幫助,您可以打賞我,您的打賞讓我會更有動力。

 

技術交流QQ群:15129679