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); } }) } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)