ecology8合并表格相同内容的行

话不多说,上代码:

 1 /**
 2  * 合并表格相同行的内容
 3  * @param {*} table 表格或者表格ID(最好是tbody,避免把表尾给合并了)
 4  * @param {*} startRow 起始行,没有标题就从0开始
 5  * @param {*} endRow 终止行,此参数是递归时检查的范围,一开始时会自动赋值为最后一行
 6  * @param {*} col 当前处理的列
 7  * @param {*} endCol 终止列
 8  * @param {*} isInit 是否初始调用,如果是则在终止行为0时自动取最后一行
 9  */
10 function mergeCell(table, startRow, endRow, col, endCol, isInit) {
11     if (typeof (table) == 'string')
12         table = document.getElementById(table);
13     if (col >= table.rows[0].cells.length || col > endCol) {
14         return;
15     }
16     if (isInit == undefined) isInit = true;
17     //当检查第0列时检查所有行
18     if ((col == 0 || endRow == 0) && isInit) {
19         endRow = table.rows.length - 1;
20     }
21     for (var i = startRow; i < endRow; i++) {
22         var $td1=$(table.rows[startRow].cells[col]);
23         var $td2=$(table.rows[i + 1].cells[col]);
24         var value1=$td1.children("input").val();
25         var value2=$td2.children("input").val();
26         //程序是自左向右合并
27         if(value1==value2){
28             //如果相同则隐藏下一行的同列单元格
29             $td2.hide();
30             //更新rowSpan属性
31             table.rows[startRow].cells[col].rowSpan = (table.rows[startRow].cells[col].rowSpan | 0) + 1;
32             //当循环到终止行前一行并且起始行和终止行不相同时递归(因为上面的代码已经检查了i+1行,所以此处只到endRow-1)
33             if (i == endRow - 1 && startRow != endRow) {
34                 mergeCell(table, startRow, endRow, col + 1, endCol, false);
35             }
36         } else {
37             //起始行,终止行不变,检查下一列
38             mergeCell(table, startRow, i, col + 1, endCol, false);
39             //增加起始行
40             startRow = i + 1;
41         }
42     }
43 }

调用:

1 mergeCell('oTable2',2,0,2,5,true); 

 

posted @ 2019-10-11 13:49  灌汤非  阅读(615)  评论(0)    收藏  举报