jquery 实现table表格动态合并行?求指教

当id相同时,内容相同的行,列合并
图片描述

期望结果:
图片描述

<table id="tb" border="1">
            <thead>
                <tr>
                    <td align="center">序号</td>
                    <td>id</td>
                    <td>国家</td> 
                    <td>地区</td> 
                    <td>颜色</td>
                </tr>
            </thead>
                <tr>
                    <td align="center">1</td>
                    <td>001</td>
                    <td>中国</td> 
                    <td>河南</td> 
                    <td>红色</td>
                </tr>
                
                <tr>
                    <td align="center">2</td>
                    <td>001</td>
                    <td>中国</td> 
                    <td>北京</td> 
                    <td>红色</td>
                </tr> 
                <tr>
                    <td align="center">3</td>
                    <td>004</td>
                    <td>中国</td> 
                    <td>四川</td> 
                    <td>紫色</td>
                </tr> 
                <tr>
                    <td align="center">4</td>
                    <td>003</td>
                    <td>美国</td> 
                    <td>纽约</td> 
                    <td>黑色</td>
                </tr> 
                <tr>
                    <td align="center">5</td>
                    <td>003</td>
                    <td>美国</td> 
                    <td>洛杉矶</td> 
                    <td>蓝色</td>
                </tr> 
                <tr>
                    <td align="center">6</td>
                    <td>005</td>
                    <td>英国</td> 
                    <td>伦敦</td> 
                    <td>蓝色</td>
                </tr>
        </table>
阅读 3.4k
1 个回答

function initTable() {
    $('tr').each(function() {
        var child = $(this).children('td');
        var id = $(child[1]).text();

        $(child).each(function() {
            $(this).attr('data-field', id + $(this).text());
        });
    });
}

function formatCol($col) {
    var rows = {};
    $col.each(function(index) {
        if (!rows[$(this).attr('data-field')]) {
            rows[$(this).attr('data-field')] = [];
        }
        rows[$(this).attr('data-field')].push($(this));
    });
    for (var id in rows) {
        if (rows[id].length == 1) continue;
        var colCount = rows[id].length;
        var $td = rows[id];
        for (var i = 0; i < colCount; i++) {
            if (i === 0) {
                $td[i].attr('rowspan', colCount);
            } else {
                $td[i].hide();
            }
        }
    }
}

function processTable() {
    initTable();
    var colsLength = $('thead tr:nth-child(1) td').length;
    for (var i = 1; i <= colsLength; i++) {
        var $col = $('tr td:nth-child(' + i + ')');
        formatCol($col);
    }
}

processTable();  //执行入口
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题