1. 程式人生 > >Javascript合併表格中具有相同內容的單元格

Javascript合併表格中具有相同內容的單元格

HTML或者JSP的TABLE需要不同行但是內容相同的單元格進行合併,本文以省市縣為例,對錶格中的省市進行二級合併,具體的頁面程式碼和樣式不再展示,主要介紹JS如何實現TABLE的單元格合併(無需第三方庫)。

JS程式碼如下:

Function mergeTable( ){
	//預設表格首行為表頭,從第二行(index=1)開始合併
	var row = 1;
	//col=0第一列,col=1第二列
	var col = 0;
	var provincePos=1;
	var cityPos=1;
	//上次儲存的省份值
	var lastProvinceValue = "";
	//上次儲存的城市值 
	var lastCityValue = "";
	//本次提取的省份值
	var provinceValue = ""; 
	//本次提取的城市值
	var cityValue = "";
	//獲取表格Dom節點
	var table = document.getElementById("cityList");
	//首先判斷表格第一行是否有資料(預設第一行沒有資料則表格為空,不需要接下來的步驟直接跳出。)
	if("" == table.rows[1].cells[0].innerText)
	{
		//可以直接return,也可以自定義方法。	
	}else{
		//合併省份程式碼
		for(var i=row; i<table.rows.length; i++){
			provinceValue = table.rows[i].cells[col].innerText; 
			cityValue = table.rows[i].cells[col+1].innerText;
    		if(lastProvinceValue == provinceValue){
        		//合併城市程式碼
    			if(lastCityValue == cityValue){
        			table.rows[i].deleteCell(col+1); 
        			table.rows[i-cityPos].cells[col+1].rowSpan = table.rows[i-cityPos].cells[col+1].rowSpan+1; 
        			cityPos++; 
	        	}else{ 
	        		lastCityValue = cityValue; 
	        		cityPos=1;
	        	} 
    			table.rows[i].deleteCell(col); 
    			table.rows[i-provincePos].cells[col].rowSpan = table.rows[i-provincePos].cells[col].rowSpan+1; 
    			provincePos++; 
        	}else{ 
        		lastProvinceValue = provinceValue;
        		lastCityValue = cityValue;
	        	provincePos=1;
	        	cityPos=1;
        	} 
    	}   	 
    }	
} 


上述JS程式碼可以直接放在SCRIPT中檢測,同時如果所用的JS框架中列表展示具有回撥功能可以放在回撥引數中,例如:

"drawCallback":mergeTable()
上述JS程式碼只是簡單的封裝TABLE合併單元格,耦合性還較高,希望道友能夠共同討論,抽象出完全解耦的功能函式。