這個函數拿去可以直接使用,旨在合並上下單元格值相同的情況。如下圖效果:
註釋我都寫瞭,相比你能看的懂的,或許和你的要求不一,但你可以在這基礎上來做修改便是。
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的專欄