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>