如何优雅的进行单元格合并

简介:

缘起

在前端开发过程中,大家想必都遇到过合并单元格的场景,那么你是怎么做的呢?欢迎分享, 这里分享我的方法供大家借鉴。 主要实现了2个方法 rowspan(colIdx) 和 copyRowspan (fromColIdx, toColIdx) 。rowspan 方法根据上下相邻的单元格内容相同则合并为一个。 copyRowspan 方法复制某列的合并规则。 一般这2个方法配合使用,可以完成比较复杂的单元格合并逻辑。
先上个效果图:
1532052245841-6e1deadb-0b9d-45b4-93d9-6629536945e1.png

如图示,完成了 第0、1、2、3、7列的合并。

效果图

下面代码是生成上图效果的的代码,代码相当简单:


$('#comboTable').on('draw.dt', function () {
    $(this).rowspan(0);  // 0列内单元格值相同会被合并
    $(this).copyRowspan(0, 1);  //复制0列的合并规则 到 1列
    $(this).copyRowspan(0, 2);
    $(this).copyRowspan(0, 3);
    $(this).copyRowspan(0, 7);

});

rowspan和copyRowspan是如何实现的呢?

直接上代码了,不再详述原理,有研究精神的同学可以看代码研究下,如果有bug欢迎留言反馈。 偷懒的同学可以复制黏贴了。



(function ($) {
    $.fn.extend({  //把如下2个方法,添加到jquery库中。
        "rowspan": function (colIdx) { //colIdx要合并的列序号,从0开始,  单元格中text(这个地方也可以改为html)相同则合并。 
            return this.each(function () {
                var that;
                $('tr', this).each(function (row) {
                    $('td:eq(' + colIdx + ')', this).filter(':visible').each(function (col) {
                        if (that != null && $(this).text() == $(that).text()) {
                            var rowspan = $(that).attr("rowSpan");
                            if (rowspan == undefined) {
                                $(that).attr("rowSpan", 1);
                                rowspan = $(that).attr("rowSpan");
                            }
                            rowspan = Number(rowspan) + 1;
                            $(that).attr("rowSpan", rowspan);
                            $(this).hide();
                        } else {
                            that = this;
                        }
                    });
                });
            });
        },
        "copyRowspan": function (fromColIdx, toColIdx) { //复制源列的单元格合并规则
            return this.each(function () {
                $('tr', this).each(function (row) {
                    var rowspan = $('td:eq(' + fromColIdx + ')', this).attr("rowSpan");
                    var style = $('td:eq(' + fromColIdx + ')', this).attr("style");

                    if (rowspan != undefined) {
                        $('td:eq(' + toColIdx + ')', this).attr("rowSpan", Number(rowspan));
                    }
                    if (style != undefined) {
                        $('td:eq(' + toColIdx + ')', this).attr("style", style);
                    }
                });
            });
        }
    });

})(jQuery);

目录
相关文章
|
2月前
空的单元格
空的单元格。
15 1
excel中同一单元格内容分隔到不同的单元格
excel中同一单元格内容分隔到不同的单元格
excel中同一单元格内容分隔到不同的单元格
|
7月前
|
JavaScript 前端开发 Java
72jqGrid 分组表头 - 有合并列的样式
72jqGrid 分组表头 - 有合并列的样式
35 0
excel中组合不同单元格的文字并实现单元格内换行
excel中组合不同单元格的文字并实现单元格内换行
|
4月前
|
小程序
06 - table表格标签+ 行合并+列合并
06 - table表格标签+ 行合并+列合并
|
7月前
|
JavaScript 前端开发 Java
71jqGrid 分组表头 - 没有合并列的样式
71jqGrid 分组表头 - 没有合并列的样式
16 0
poi 生成word 表格,并向表格单元格中插入多个图片
poi 生成word 表格,并向表格单元格中插入多个图片
313 0
poi 生成word 表格,并向表格单元格中插入多个图片
|
数据库
poi 读取word 遍历表格和单元格中的图片
poi 读取word 遍历表格和单元格中的图片
358 0
poi 读取word 遍历表格和单元格中的图片
jqgrid实现表头合并功能
jqgrid实现表头合并功能
313 0

热门文章

最新文章