Layui Table 自动合并行

Layui Table 自动合并行

使用步骤:1. 引入函数,2. table添加done,3. 行添加merge属性

合并函数

function merge(myTable) {
            var tableBox = $(myTable.elem).next().children('.layui-table-box'),
                $main = $(tableBox.children('.layui-table-body').children('table').children('tbody').children('tr').toArray().reverse()),
                $fixLeft = $(tableBox.children('.layui-table-fixed-l').children('.layui-table-body').children('table').children('tbody').children('tr').toArray().reverse()),
                $fixRight = $(tableBox.children('.layui-table-fixed-r').children('.layui-table-body').children('table').children('tbody').children('tr').toArray().reverse()),
                cols = myTable.cols[0], mergeRecord = {};

            for (let i = 0; i < cols.length; i++) {
                var item3 = cols[i], field=item3.field;
                if (item3.merge) {
                    var mergeField = [field];
                    if (item3.merge !== true) {
                        if (typeof item3.merge == 'string') {
                            mergeField = [item3.merge]
                        } else {
                            mergeField = item3.merge
                        }
                    }
                    mergeRecord[i] = {mergeField: mergeField, rowspan:1}
                }
            }

            $main.each(function (i) {

                for (var item in mergeRecord) {
                    if (i==$main.length-1 || isMaster(i, item)) {
                        $(this).children('[data-key$="-'+item+'"]').attr('rowspan', mergeRecord[item].rowspan).css('position','static');
                        $fixLeft.eq(i).children('[data-key$="-'+item+'"]').attr('rowspan', mergeRecord[item].rowspan).css('position','static');
                        $fixRight.eq(i).children('[data-key$="-'+item+'"]').attr('rowspan', mergeRecord[item].rowspan).css('position','static');
                        mergeRecord[item].rowspan = 1;
                    } else {
                        $(this).children('[data-key$="-'+item+'"]').remove();
                        $fixLeft.eq(i).children('[data-key$="-'+item+'"]').remove();
                        $fixRight.eq(i).children('[data-key$="-'+item+'"]').remove();
                        mergeRecord[item].rowspan +=1;
                    }
                }
            })

            function isMaster (index, item) {
                var mergeField = mergeRecord[item].mergeField;
                var dataLength = layui.table.cache[myTable.id].length;
                for (var i=0; i<mergeField.length; i++) {

                    if (layui.table.cache[myTable.id][dataLength-2-index][mergeField[i]]
                        !== layui.table.cache[myTable.id][dataLength-1-index][mergeField[i]]) {
                        return true;
                    }
                }
                return false;
            }
        }

使用

 layui.table.render({
            elem: '#table'
            ,height: 312
            ,page: true //开启分页
            , cols:  [[ //标题栏
                {field: 'u', title: '名称', width: 190, merge:true} //rowspan即纵向跨越的单元格数
                ,{field: 'r', title: '名称', width: 160, merge: true}
                ,{field: 'ra', title: '名称',width: 200}
                ,{field: 'ca',title: '状态', width: 90}
                ,{field: 'rea', title: '原因'}
                //colspan即横跨的单元格数,这种情况下不用设置field和width
            ]]
            ,done: function () {
                merge(this);
            }
            ,data: [
                {'u':'a','r':['b','C'],'ra':'c','ca':'d','rea':'e'},
                {'u':'a','r':'b1','ra':'c1','ca':'d1','rea':'e1'},
               
            ]

        });
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
layui table 是一款基于jQuery的表格渲染插件,它提供了丰富的功能和易于使用的API,能够让我们快速地开发出漂亮、功能强大的数据表格。 在layui table中,合并就是指将相邻的中某些具有相同值的合并成一,以提高表格的可读性和美观性。实现合并的方式有多种,下面介绍两种常用的方法: 1. 使用 rowspan 属性 首先,在处理数据时,需要对相邻的中某些的值进比较,判断它们是否相同。如果相同,则将 rowspan 属性设置为相同的值,以合并这些。例如: <table class="layui-table"> <thead> <tr> <th>姓名</th> <th>科目</th> <th>成绩</th> </tr> </thead> <tbody> <tr> <td rowspan="2">张三</td> <td>语文</td> <td>90</td> </tr> <tr> <td>数学</td> <td>95</td> </tr> <tr> <td>李四</td> <td>语文</td> <td>88</td> </tr> <tr> <td rowspan="2">王五</td> <td>语文</td> <td>94</td> </tr> <tr> <td>数学</td> <td>92</td> </tr> </tbody> </table> 上面的代码中,将张三的两合并为一,使用了 rowspan 属性,设置为 2。王五的也做了相同的操作,合并了两。 2. 使用 js 实现 另外,layui table 也提供了 API 来实现合并的操作。例如,在渲染表格时,可以调用一个回调函数对每一处理,判断是否需要合并。示例代码如下: layui.use(['table'], function() { var table = layui.table; table.render({ elem: '#demo', cols: [[ {field: "name", title: "姓名", width: 100}, {field: "subject", title: "科目", width: 100}, {field: "score", title: "成绩", width: 100} ]], data: [{ name: "张三", subject: "语文", score: 90 }, { name: "张三", subject: "数学", score: 95 }, { name: "李四", subject: "语文", score: 88 }, { name: "王五", subject: "语文", score: 94 }, { name: "王五", subject: "数学", score: 92 }], done: function(res, curr, count) { //合并单元格 var index = 0; var mergeCount = 1; //合并计数器 var tdCount = $('.layui-table thead tr:eq(0) th').length; //表格总数 for (var i = 0; i < res.data.length; i++) { //第一个数据 if (i == 0) { mergeCount = 1; continue; } //与上一相同 if (res.data[i].name == res.data[i-1].name) { mergeCount++; $('tbody tr:eq('+(index-1)+') td:first').attr('rowspan', mergeCount); $('tbody tr:eq('+i+') td:first').remove(); //合并 for (var j = 0; j < tdCount-1; j++) { $('tbody tr:eq('+(index-1)+') td:eq('+j+')').attr('rowspan', mergeCount); $('tbody tr:eq('+i+') td:eq('+j+')').remove(); } } //与上一不同 else { mergeCount = 1; index = i; } } } }) }) 上面的示例代码中,先使用了 API 渲染了一个表格,并在 done 方法中实现了一个回调函数,对每一处理,判断是否需要进合并操作。 合并操作的思路是,遍历当前的数据,与上一比较,如果值相同,则将当前的第一个单元格的 rowspan 属性加 1,同时移除当前的第一个单元格;然后,再对其他合并。如果值不同,则重新计数。 总之,无论是使用 rowspan 属性还是 js 实现,合并都是一项非常实用的技术,可以大大提高表格的可读性和美观性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jonny Jiang-zh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值