一種HTML table合併單元格的思路

    /**
     * 合併單元格
     * @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

 

相關文章
相關標籤/搜索