layui多表格单元格合并

               

 

 

 

 

今天多表格合并时显示就乱了,就修改了下

这个合并最开始@Kingram  编写

初始

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//layui 结束
//合并开始
function merge(res)
{
    var data = res.data;
    var mergeIndex = 0;//定位需要添加合并属性的行数
    var mark = 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数
    var _number = 1;//保持序号列数字递增
    var columsName = ['一级指标', '二级指标'];//需要合并的列名称
    var columsIndex = [1, 2];//需要合并的列索引值
    var mergeCondition = 'id';//需要合并的 首要条件  在这个前提下进行内容相同的合并
    var tdArrL = $('.layui-table-fixed-l > .layui-table-body').find("tr");//序号列左定位产生的table tr
    var tdArrR = $('.layui-table-fixed-r > .layui-table-body').find("tr");//操作列定右位产生的table tr
 
    for (var k = 0; k < columsName.length; k++) { //这里循环所有要合并的列
        var trArr = $(".layui-table-main>.layui-table").find("tr");//所有行
        for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据
            if (data[i][mergeCondition] === data[i - 1][mergeCondition]) {
                var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列
                var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列
 
                if (data[i][columsName[k]] === data[i - 1][columsName[k]]) { //后一行的值与前一行的值做比较,相同就需要合并
                    mark += 1;
                    tdPreArr.each(function () {//相同列的第一列增加rowspan属性
                        $(this).attr("rowspan", mark);
                    });
                    tdCurArr.each(function () {//当前行隐藏
                        $(this).css("display", "none");
                    });
                } else {
                    mergeIndex = i;
                    mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算
                }
            } else {
                mergeIndex = i;
                mark = 1;//一旦前后两行的值不一样了,那么需要合并的Uriririri子数mark就需要重新计算
            }
        }
        mergeIndex = 0;
        mark = 1;
    }
    //操作左右定位列的表格
    $.each($("#qua_standard_table").siblings('.layui-table-view').find('.layui-table-main>.layui-table').find("tr"), function (i, v) {
        if ($(v).find('td').eq(2).css('display') === 'none') {
            tdArrL.eq(i).find('td').css('display', 'none');
            tdArrR.eq(i).find('td').css('display', 'none');
        } else {
            tdArrL.eq(i).find('td').find('.laytable-cell-numbers').html(_number++);
            tdArrL.eq(i).find('td').css('height', $(v).find('td').eq(2)[0].clientHeight);
            tdArrR.eq(i).find('td').css('height', $(v).find('td').eq(2)[0].clientHeight);
        }
    })
}

修改后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//layui 结束
       //合并开始
       function merge(res,value)//value为你table的id名称,
       {
               var data = res.data;
               var mergeIndex = 0;//定位需要添加合并属性的行数
               var mark = 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数
               var _number = 1;//保持序号列数字递增
               var columsName = ['一级指标', '二级指标'];//需要合并的列名称
               var columsIndex = [0, 1];//需要合并的列索引值
               var mergeCondition = 'id';//需要合并的 首要条件  在这个前提下进行内容相同的合并
               var tdArrL = $('.layui-table-fixed-l >[lay-id=table' + value + '] .layui-table-body').find("tr");//序号列左定位产生的table tr
               var tdArrR = $('.layui-table-fixed-r >[lay-id=table' + value + '] .layui-table-body').find("tr");//操作列定右位产生的table tr
              //var tdArrL = $('.layui-table-fixed-l > .layui-table-body').find("tr");//序号列左定位产生的table tr
              //var tdArrR = $('.layui-table-fixed-r > .layui-table-body').find("tr");//操作列定右位产生的table tr
 
               for (var k = 0; k < columsName.length; k++) { //这里循环所有要合并的列
                   var trArr = $('[lay-id=table' + value + '] .layui-table-body').find("tr")// $(".layui-table-main>.layui-table").find("tr");//所有行
                   var a = $(".layui-table-main>.layui-table").find("tr");
                  // console.log($(".layui-table-main>.layui-table").find("tr"));
                 //  console.log($('[lay-id=table' + value + '] .layui-table').find("tr"));
                   for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据
                       if (data[i][mergeCondition] === data[i - 1][mergeCondition]) {
 
                           var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列
 
                           var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列
 
                           if (data[i][columsName[k]] === data[i - 1][columsName[k]]) { //后一行的值与前一行的值做比较,相同就需要合并
                               mark += 1;
                               tdPreArr.each(function () {//相同列的第一列增加rowspan属性
                                   $(this).attr("rowspan", mark);
                               });
                               tdCurArr.each(function () {//当前行隐藏
                                   $(this).css("display", "none");
                               });
                           } else {
                               mergeIndex = i;
                               mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算
                           }
                       } else {
                           mergeIndex = i;
                           mark = 1;//一旦前后两行的值不一样了,那么需要合并的Uriririri子数mark就需要重新计算
                       }
                   }
                   mergeIndex = 0;
                   mark = 1;
               }
               // 操作左右定位列的表格
               $.each($("#qua_standard_table").siblings('.layui-table-view').find('.layui-table-main>.layui-table').find("tr"), function (i, v) {
                   if ($(v).find('td').eq(2).css('display') === 'none') {
                       tdArrL.eq(i).find('td').css('display', 'none');
                       tdArrR.eq(i).find('td').css('display', 'none');
                   } else {
                       tdArrL.eq(i).find('td').find('.laytable-cell-numbers').html(_number++);
                       tdArrL.eq(i).find('td').css('height', $(v).find('td').eq(2)[0].clientHeight);
                       tdArrR.eq(i).find('td').css('height', $(v).find('td').eq(2)[0].clientHeight);
                   }
               })
       }

  

 

posted @   孤海飞雁  阅读(839)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示