/** * 合併單元格 * @param table1 表格的ID * @param startRow 起始行 * @param col 合併的列號,對第幾列進行合併(從0開始)。若是傳下來爲0就是從第一列開頭到結束合併 */ function mergeCell(table1, startRow, mergeColArr){ var tb = document.getElementById(table1); var endRow=tb.rows.length; var colLen = tb.rows[0].cells.length - 1; var cmpCnt = "order_no"; var orderRows = []; var bgColor = ["rgb(252,252,252)","rgb(242,242,242)"]; var orderIdx = 0; //每一個訂單的起始行號 var mergeStarRow = 1; for (var i = startRow; i < endRow; i++) { if(typeof tb.rows[i + 1] === "undefined"){ for(var m = colLen; m >= 0; m--){ tb.rows[i].cells[m].style.backgroundColor = bgColor[orderIdx % 2]; } break; } var prev_rows = tb.rows[startRow],prev_cells = prev_rows.cells; var next_rows = tb.rows[i + 1],next_cells = next_rows.cells; if ($.trim(prev_rows.getAttribute(cmpCnt)) == $.trim(next_rows.getAttribute(cmpCnt))) { if(typeof tb.rows[i + 2] === "undefined"){ orderRows.push({"starow":mergeStarRow,"endrow":i+1}); } continue; }else{ startRow = i + 1; orderRows.push({"starow":mergeStarRow,"endrow":i}); mergeStarRow = startRow; orderIdx++; } } var len = orderRows.length; for(var n = 0;n < len; n++){ var starow = orderRows[n]["starow"]; var endrow = orderRows[n]["endrow"]; var rowspan = endrow - starow + 1; //循環行 for(var j = starow; j <= endrow; j++){ var flag = false; //反序循環列(由於刪掉td後索引會變) for(var k = colLen; k >= 0; k--){ tb.rows[j].cells[k].style.backgroundColor = bgColor[n % 2]; if(mergeColArr.indexOf(k) > -1){ //若是是第一行,就設置rowSpan if(j === starow){ tb.rows[j].cells[k].rowSpan = rowspan; }else{ //不然就倒序刪掉mergeColArr[k]列 tb.rows[j].removeChild(tb.rows[j].cells[k]); } } } } } } mergeCell('c1',1,[0,1,2,6,7,8,9,10,12]);
下面是合併後的效果 :spa