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>
  • 相关阅读:
    简简单单的 JavaScript简写技巧
    常用的前端小知识
    nuxt项目部署对静态页重编译问题
    docker 容器部署nuxt项目
    mysql数据库损坏修复问题
    storm supervisor和nimbus启动自动消失的问题
    MATLAB基础知识
    音视频入门-20-BMP、PNG、JPG、GIF静态图生成GIF动态图
    处理树状结构数据以及 React渲染
    React Hooks 获取最新数据问题
  • 原文地址:https://www.cnblogs.com/zhoulingfeng/p/7822908.html
Copyright © 2011-2022 走看看