2025-05-17

這個函數拿去可以直接使用,旨在合並上下單元格值相同的情況。如下圖效果: 

 

註釋我都寫瞭,相比你能看的懂的,或許和你的要求不一,但你可以在這基礎上來做修改便是。

function rowSpan(){
 //得到table對象
 var tab = document.getElementById("tab");
 if(!tab){
  return;
 }
 //從第二行開始,排除標題行
 var startRow = 1;
 //循環記錄表格中td的內容,用來判斷td中的value是否發生瞭改變
 var tdTempV = "";
 //如果td的值相同,那麼變量加1, 否則將臨時變量加入集合中
 var rowCount = 1;
 //得到相同內容的行數的集合www.aiwalls.com
 var totalcount = new Array(); 

 for(var i=1;i <tab.rows.length;i++) {
  //首先拿出來td的值
  var tdText = tab.rows[i].cells[0].innerText;
  //如果是第一次走循環,直接continue; 
  if (i == startRow){
   tdTempV = tdText;
   continue;
  }
  //如果當前拿出來的值和出處的值相同,那麼將臨時數量加1,否則添加到集合裡面
  if(tdTempV == tdText){
   rowCount++ ;
  }else{
   totalcount.push(rowCount); 
   tdTempV = tdText;
   rowCount = 1;
  }
 
  //判斷是否是循環的最後一次,如果是最後一次那個直接將當前的數量存儲到集合裡面
  if (i == tab.rows.length – 1)  {
   totalcount.push(rowCount); 
  }
 }
 //臨時變量,再循環中判斷是否和數組中的一項值相同  
 var tNum = 0;
 //註意這個循環是倒著來的
 for (var i = tab.rows.length – 1; i >= startRow; i–){
  //臨時變量,存儲td  
  var tTd=tab.rows[i].cells[0]; 
  tNum++; 
  //如果發現tNum和數組中最後一個值相同,那麼就可以斷定相同的td已經結束[隻是其中一個] 
  if (tNum == totalcount[totalcount.length – 1]){
   //給當前td添加rowSpan屬性
   tTd.setAttribute("rowSpan",totalcount[totalcount.length – 1]);
   //將數組的最後一個元素彈出
   totalcount.pop(); 
   tNum = 0;
  }else{
   //刪除當前td  
   tab.rows[i].removeChild(tTd);
  }
 }
}

 

摘自  zhangyuhong的專欄
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *