js動態合並單元格


 1 <script type="text/javascript">
 2 
 3     $(document).ready(function() {
 4         // 調用
 5          mergeSameCell(document.getElementById('contentTable'),1,0,[1,2,3,4,5]); 
 6     }
 7 
 8      //tbl:table對應的dom元素,  
 9      //beginRow:從第幾行開始合並(從0開始),  
10      //endRow:合並到哪一行,負數表示從底下數幾行不合並  
11      //colIdxes:合並的列下標的數組,如[0,1]表示合並前兩列,[0]表示只合並第一列  
12      function mergeSameCell(tbl,beginRow,endRow,colIdxes){  
13          var colIdx = colIdxes[0];  
14          var newColIdxes = colIdxes.concat();  
15          newColIdxes.splice(0,1)  
16          var delRows = new Array();  
17          var rs = tbl.rows;  
18          //endRow為0的時候合並到最后一行,小於0時表示最后有-endRow行不合並  
19          if(endRow === 0){  
20              endRow = rs.length - 1;  
21          }else if(endRow < 0){  
22              endRow = rs.length - 1 + endRow;  
23          }  
24          var rowSpan = 1; //要設置的rowSpan的值  
25          var rowIdx = beginRow; //要設置rowSpan的cell行下標  
26          var cellValue; //存儲單元格里面的內容  
27          for(var i=beginRow; i<= endRow + 1; i++){  
28              if(i === endRow + 1){//過了最后一行的時候合並前面的單元格  
29                  if(newColIdxes.length > 0){  
30                      mergeSameCell(tbl,rowIdx,endRow,newColIdxes);  
31                  }  
32                  rs[rowIdx].cells[colIdx].rowSpan = rowSpan;  
33              }else{  
34                  var cell = rs[i].cells[colIdx];  
35                  if(i === beginRow){//第一行的時候初始化各個參數  
36                      cellValue = cell.innerHTML;  
37                      rowSpan = 1;  
38                      rowIdx = i;  
39                  }else if(cellValue != cell.innerHTML){//數據改變合並前面的單元格  
40                      cellValue = cell.innerHTML;  
41                      if(newColIdxes.length > 0){  
42                          mergeSameCell(tbl,rowIdx,i - 1,newColIdxes);  
43                      }  
44                      rs[rowIdx].cells[colIdx].rowSpan = rowSpan;  
45                      rowSpan = 1;  
46                      rowIdx = i;  
47                  }else if(cellValue === cell.innerHTML){//數據和前面的數據重復的時候刪除單元格  
48                      rowSpan++;  
49                      delRows.push(i);  
50                  }  
51              }  
52          }  
53          for(var j=0;j<delRows.length; j++){  
54              rs[delRows[j]].deleteCell(colIdx);  
55          }  
56     }  
57 </script>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM