zoukankan      html  css  js  c++  java
  • 复杂表头

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>复杂表头</title>
    </head>
    <body>
        
        <script type="text/javascript">
            var data = [
                {
                    key: 'A',
                    nodes: 4,
                    children: [
                        { key: 'A1' },
                        { key: 'A2', nodes: 2,
                            children: [
                                { key: 'A21' },
                                { key: 'A22', nodes: 1, children: [{ key: 'A221' }] }
                            ] 
                        },
                        { key: 'A3' }
                    ]
                },
                {
                    key: 'B',
                    nodes: 4,
                    children: [
                        { key: 'B1', nodes: 2, 
                            children: [
                                { key: 'B11', nodes: 1, children: [{ key: 'B111' }] },
                                { key: 'B12' }
                            ] 
                        },
                        { key: 'B2' },
                        { key: 'B3' }
                    ]
                }
            ];
    
            
    
            function printColumn(row, layer, index = 0) {
                if (row.length === 0) return '';
    
                var nextRow = [];
                var tpl = '<tr>';
    
                row.forEach(v => {
                    if (v.nodes) {
                        tpl += '<td colspan="' + v.nodes + '">' + v.key + '</td>';
                        nextRow = nextRow.concat(v.children);
                    } else {
                            tpl += '<td rowspan="'+(layer - index)+'">' + v.key + '</td>';
                    }
    
                });
    
                tpl += '</tr>';
    
                if (nextRow.length) {
                    tpl += printColumn(nextRow, layer, index + 1);
                }
    
                return tpl;
            }
    
            function printRow(col, layer, index = 0) {
                if (layer === index) return '';
    
                col.forEach(v => {
                    let size = layer - index - 1;
                    tpl += '<tr>';
                    if (v.nodes) {
                        tpl += '<td rowspan="' + (v.nodes) + '">' + v.key + '</td>';
                        printCell(v.children.shift(), layer, index + 1, size);
                        tpl += '</tr>';
                        if (v.children.length) {
                            printRow(v.children, layer, index + 1);
                        }
                    } else {
                        tpl += '<td colspan="' + (size + 1) + '">' + v.key + '</td></tr>';
                    }
                });
            }
    
            function printCell(col, layer, index, size) {
                if (col.nodes) {
                    tpl += '<td rowspan="'+ col.nodes +'">' + col.key + '</td>';
                    printCell(col.children.shift(), layer, index + 1, size - 1);
                    if (col.children.length) {
                        printRow(col.children, layer, index + 1, size);
                    }
                } else {
                    tpl += '<td colspan="' + size + '">' + col.key + '</td>';
                }
            }
    
    
            var table = '<table border=1>';
            table += printColumn(data, 4);
            table += '</table>';
            
            var tpl = '<table border=1>';
            printRow(data, 4);
            tpl += '</table>';
    
            document.write(table + tpl);
        </script>
    </body>
    </html>
  • 相关阅读:
    8种元素定位方式
    接口MD5加密如何测试?
    web自动化测试框架 —数据驱动测试
    等待方式
    全面开展测试需求分析
    字符串格式化(%方式 与 format方式)
    Python中八大基本数据类型之 集合
    Python中 __new__ 和 __init__ 的区别
    C/S模式与B/S模式的工作原理
    剑指offer--把二叉树打印成多行
  • 原文地址:https://www.cnblogs.com/zhoulingfeng/p/7822908.html
Copyright © 2011-2022 走看看