JS:jquery插件表格單元格合並.


公司需要用到單元格合並,於是動手封裝了一個簡單的jquery插件,封裝的函數是直接寫好轉的,請多多提意見看代碼是否有優化的地方.....

截圖:

代碼:

/*
 * mergeTable 0.1
 * Copyright (c) 2013 eastday  http://eastday.cnblogs.com/
 * Date: 2013-07-19
 * 使用mergetTable可以方便地將表格進行合並。
 * 參數說明:rowsToMerger 跨行合並列 cols:需要合並的列索引,從0開始,rows:[起始行-結束行],val:填充值
           colsToMerger 同行合並列 rows:需要合並的行索引,從0開始,cols:[起始列-結束列],val:填充值
 */
(function($){
	$.fn.mergeTable = function(options){
		var defaults = {
			rowsToMerger:[{cols:0,rows:[1,2],val:"rowsToMerger"}],
			colsToMerger:[{rows:0,cols:[1,2],val:"colsToMerger"}]	
		}
		var options = $.extend(defaults, options);
	        return	this.each(function(){
				//1.首先讀取整個表格的內容..
				var	gcolsNum=$(this).find("tr").eq(0).find("td").size();
				var	growsNum=$(this).find("tr").size();
				
				//2.跨行合並列
				var rowsToMerger= options.rowsToMerger;
				//3.同行合並列
				var colsToMerger= options.colsToMerger;
				 
				for(var j=0;j<rowsToMerger.length;j++)
				{
				   setRowspan($(this),rowsToMerger[j].cols,rowsToMerger[j].rows,rowsToMerger[j].val);
				}
				
				for(var j=0;j<colsToMerger.length;j++)
				{
					setColspan($(this),colsToMerger[j].cols,colsToMerger[j].rows,colsToMerger[j].val)
				}
				//同行合並列
				function setColspan(obj,cols,rows,val)
				{
					var colstar=cols[0];
					var colsend=cols[1];
					var objtr=$(obj).find("tr").eq(rows);
					var curColsNum=objtr.find("td").size();
			
					var objtd;
					//如果沒有合並過列
					if (gcolsNum==curColsNum){
					  objtd= objtr.find("td").eq(colstar).attr("colspan",colsend-colstar +1 );
					//SET VALUE
					 if(val!="") {
						objtr.find("td").eq(colstar).html(val);
					 }
					}else {
					 //合並過列以后,列需要重新計算
					 var colsdif=gcolsNum-curColsNum;
					 objtd= objtr.find("td").eq(colstar-colsdif).attr("colspan",colsend-colstar +1 );
					 //SET VALUE
					 objtr.find("td").eq(colstar-colsdif).html(val);
					}
					  
					 //移除合並以前的列
					 for(var i=colstar+1;i<colsend+1;i++ )
					 {  
					   var colsDif= colsend - colstar;
						if(gcolsNum==curColsNum){
						  objtr.find("td").eq(colstar+1).remove();
						}else {
						  objtd.next().remove();
						}
					 }
				}
				//跨行合並列
				function setRowspan(obj,cols,rows,val)
				{
				   //SET VARIABLE
				   var rowstar=rows[0];
				   var rowsend=rows[1];
				   var objtr=$(obj).find("tr");
		
				   var rowStarColsNum=parseInt(objtr.eq(rowstar).find("td").size());
				   
				   //SET ROWSPAN
				   if(rowStarColsNum==parseInt(gcolsNum)) {
					 
					 objtr.eq(rowstar).find("td").eq(cols).attr("rowspan",rowsend-rowstar +1 );
					//SET VALUE
					 if(val!="") {
						objtr.eq(rowstar).find("td").eq(cols).html(val);
					 }
					 
					} else{  
						//相差的列數
						 var colsDif= gcolsNum - rowStarColsNum;
						 objtr.eq(rowstar).find("td").eq(cols-colsDif).attr("rowspan",rowsend-rowstar +1 );
						 if(val!="") {
						  objtr.eq(rowstar).find("td").eq(cols-colsDif).html(val);
					  }
					}
					//RMOVE TD
					for (var i=rowstar+1;i<rowsend+1;i++){
						
						var curCols=parseInt(objtr.eq(i).find("td").size());
						
						if (curCols==parseInt(gcolsNum))
						  {
							   objtr.eq(i).find("td").eq(cols).remove();
								
						  }else{
							   //相差的列數
							   var colsDif= gcolsNum - curCols;
							   objtr.eq(i).find("td").eq(cols-colsDif ).remove();	 
						  }
					}
				}
		});
	};
})(jQuery);

  DEMO下載:http://files.cnblogs.com/files/eastday/demo.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM