【jQuery】实现table单元格行合并

目标:
从这样一张表中,合并相同元素为一列
这里写图片描述

最终期待效果为:
这里写图片描述

可以看到同一列中相同的元素被合并,这是怎么做到的呢,第一个想法是从每列的第一行数据开始遍历该列,当发现后一行数据跟前一行数据相同时删除该行同时给前一行的rowspan+1,但实际效果问题百出,为什么呢,是这样的,虽然后一行与前一行合并了,但是被合并行依然只占据它原本的位置,而被他合并的单元格的位置,则由各自同行的其他单元格取代它的位置,于是补救方案为不是删除数据相同的列,只是将其隐藏,最终代码为:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>行合并</title>
		
		<style type="text/css">
			table
			  {
			  border-collapse:collapse;
			  
			  }

			table, td, th
			  {
			  border:1px solid black;
			  text-align:center;
			  }
			  
			 input{
				border:0;
			 }
		</style>
		
		<script type="text/javascript">
			function merge(tableId,col){
				var tr = document.getElementById(tableId);
				for(var i=1; i<tr.rows.length; i++){				//表示数据内容的第二行
					if(tr.rows[i].cells[col].innerHTML == tr.rows[i - 1].cells[col].innerHTML){//col代表列
						t = i-1;
						while(tr.rows[i].cells[col].innerHTML == tr.rows[t].cells[col].innerHTML){
							tr.rows[i].cells[col].style.display="none";
							if(tr.rows[t].cells[col].rowSpan <= (i-t)){  
								tr.rows[t].cells[col].rowSpan +=1;		//设置前一行的rowspan+1
							}
							i++;
						}
					}				
				}
			}
			
			
			
		</script>
		
	</head>
	
	<body>
		<form>
			<table id="table1">
				<thead>
					<tr >
						<td rowspan=2 id="listId">number 1</td>
						<td rowspan=2>number 2 </td>
						<td rowspan=2>number 3</td>
						<td colspan=3>number 4</td>
						<td rowspan=2>number 5</td>
						<td colspan=2>number 6</td>
						<td rowspan=2>number 7</td>					
					</tr>
					
					<tr>
						<td>list 1</td>
						<td>list 2</td>
						<td>list 3</td>
						<td>list 4</td>
						<td>list 5</td>					
					</tr>
					
				</thead>
				
				<tbody>
					<tr>
						<td><input type="text" value="12"/></td>
						<td><input type="text" value="item 1"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>						
					</tr>
					
					<tr>
						<td><input type="text" value="12"/></td>
						<td><input type="text" value="item 1"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>						
					</tr>
					<tr>
						<td><input type="text" value="12"/></td>
						<td><input type="text" value="item 1"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>						
					</tr>
					
					<tr>
						<td><input type="text" value="12"/></td>
						<td><input type="text" value="item 1"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>						
					</tr>
					<tr>
						<td><input type="text" value="12"/></td>
						<td><input type="text" value="item 1"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>						
					</tr>
					
					<tr>
						<td><input type="text" value="12"/></td>
						<td><input type="text" value="item 2"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>						
					</tr>
					<tr>
						<td><input type="text" value="12"/></td>
						<td><input type="text" value="item 1"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>						
					</tr>
					
					<tr>
						<td><input type="text" value="12"/></td>
						<td><input type="text" value="item 1"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>
						<td><input type="text"/></td>						
					</tr>
					
				<tbody>
				
			</table>
			
			
			<input   type="button"     value="merge 1" onclick="merge('table1','0')"/>
			<input   type="button"      value="merge 2" onclick="merge('table1','1')"/>
			
		</form>
	</body>
</html>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值