rowspan代表占用的行数。算法的思想:从根节点进行广度优先遍历,
(1)遍历非叶子节点时,rowspan均设为1
(2)当遍历到叶子节点时,叶子节点的rowspan为 这棵树的深度-该叶子节点所处的深度+1,
<script type="text/javascript"> $(function(){ var json = { "text" : "表格列名称", "children" : [{ "text" : "序号", "children" : [{ "text" : "序号一", "children" : [] },{ "text" : "序号二", "children" : [] }] },{ "text" : "名称", "children" : [] },{ "text" : "项目", "children" : [{ "text" : "项目一", "children" : [{ "text" : "项目二", "children" : [] },{ "text" : "项目三", "children" : [] }] },{ "text" : "项目一", "children" : [{ "text" : "项目二", "children" : [] },{ "text" : "项目三", "children" : [] }] }] }] }; function getDepth(json) { var arr = []; arr.push(json); var depth = 0; while (arr.length > 0) { debugger; var temp = []; for(var i = 0 ; i < arr.length ; i++){ temp.push(arr[i]); } arr = []; for(var i = 0 ; i < temp.length ; i++){ for(var j = 0 ; j < temp[i].children.length ; j++){ arr.push(temp[i].children[j]); } } if(arr.length >= 0){ depth++; } } return depth; } var maxdepth = getDepth(json); function getTree(json,level) { var arr = []; arr.push(json); var depth = 0; while (arr.length > 0) { var temp = []; for(var i = 0 ; i < arr.length ; i++){ temp.push(arr[i]); } arr = []; for(var i = 0 ; i < temp.length ; i++){ if(temp[i].children.length > 0){ temp[i].rowspan = 1; }else if(temp[i].children.length == 0){ temp[i].rowspan = maxdepth - level + 1; } for(var j = 0 ; j < temp[i].children.length ; j++){ arr.push(temp[i].children[j]); } } level++; } return json; } console.log(getTree(json,1)); }); </script>