目前做到了一个需求,需要用到课表,对课堂内容进行管理,但是存在很多的合堂课,需要多节课连续上下来,因此下图1的课表需要连续操作多节课。如果连堂课的单元格进行合并,可以有效解决这个问题,如图2

 

 

 图1

图2

代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
			<style>
			*{
				margin: 0;
				padding: 0;
			}
			table{
			    BORDER-COLLAPSE: collapse;
			    width: 1000px;
			    margin: 0 auto;
			}
			td{
				border: 1px solid;
				width: 100px;
			}
		</style>
	</head>
	<body>
		
		<table id = "tab">
			<tr>
				<td></td>
				<td>周一</td>
				<td>周二</td>
				<td>周三</td>
				<td>周四</td>
				<td>周五</td>
				<td>周六</td>
				<td>周天</td>
			</tr>
			<tr>
				<td>1</td>
				<td>语文</td>
				<td>数学</td>
				<td>科学</td>
				<td>英语</td>
				<td>语文</td>
				<td></td>
				<td></td>
			</tr>
			<tr>
				<td>2</td>
				<td>语文</td>
				<td>数学</td>
				<td>科学</td>
				<td>英语</td>
				<td>语文</td>
				<td></td>
				<td></td>
			</tr>
			<tr>
				<td>3</td>
				<td>数学</td>
				<td>体育</td>
				<td>语文</td>
				<td>英语</td>
				<td>数学</td>
				<td></td>
				<td></td>
			</tr>
			<tr>
				<td>4</td>
				<td>数学</td>
				<td>体育</td>
				<td>语文</td>
				<td>英语</td>
				<td>数学</td>
				<td></td>
				<td></td>
			</tr>
			<tr>
				<td>5</td>
				<td>政治</td>
				<td>实操</td>
				<td>政治</td>
				<td>美术</td>
				<td>自习</td>
				<td></td>
				<td></td>
			</tr>
			<tr>
				<td>6</td>
				<td>政治</td>
				<td>实操</td>
				<td>政治</td>
				<td>体育</td>
				<td>自习</td>
				<td></td>
				<td></td>
			</tr>
			<tr>
				<td>7</td>
				<td>自习</td>
				<td>实操</td>
				<td>自由活动</td>
				<td>体育</td>
				<td>自习</td>
				<td></td>
				<td></td>
			</tr>
		</table>
	</body>
	<script type="text/javascript" src="js/jquery-1.9.1.js" ></script>
	<script type="text/javascript">
		$(function(){
			var totalrows = $("#tab").find("tr").eq(1).find("td").length;
			var totalcols = $("#tab").find("tr").length;
			for(var i=1;i<totalcols;i++){
				var rowspan = 1;
				var startrows = $("#tab").find("tr").eq(1).find("td").eq(i);//当前单元格
				for(var j=1;j<totalrows;j++){
					var targetrows = $("#tab").find("tr").eq(j+1).find("td").eq(i);//当前单元格的下一单元格
					if(startrows.text()!=""&&targetrows.text()!=""&&startrows.text()==targetrows.text()){//若当前与目标相等则继续比较,并合并单元格,隐藏多余单元格
						rowspan++;
						startrows.attr("rowspan",rowspan);
						targetrows.attr("style","display:none");
					}else{//若不相等则当前单元格等于目标单元格,继续向下比较
						rowspan=1;
						startrows = targetrows;
					}
				}
			}
		});
	</script>
</html>

 如果上午上4节课下午上3节课的时候就会出现像周三3 4 5 6节一样,上下午的课也合并了,因此可以区分上下午,假设swks(上午课时)为4,效果如图3

 

图3

 

代码:

$(function(){
			var totalrows = $("#tab").find("tr").eq(1).find("td").length;
			var totalcols = $("#tab").find("tr").length;
			var swks = 4;
			for(var i=1;i<totalcols;i++){
				var rowspan = 1;
				var startrows = $("#tab").find("tr").eq(1).find("td").eq(i);//当前单元格
				for(var j=1;j<totalrows;j++){
					var targetrows = $("#tab").find("tr").eq(j+1).find("td").eq(i);//当前单元格的下一单元格
					if(j>=swks+1){
						if(startrows.text()!=""&&targetrows.text()!=""&&startrows.text()==targetrows.text()){//若当前与目标相等则继续比较,并合并单元格,隐藏多余单元格
							rowspan++;
							startrows.attr("rowspan",rowspan);
							targetrows.attr("style","display:none");
						}else{//若不相等则当前单元格等于目标单元格,继续向下比较
							rowspan=1;
							startrows = targetrows;
						}
					}else if(j<swks+1){
						if(j<swks){
							if(startrows.text()!=""&&targetrows.text()!=""&&startrows.text()==targetrows.text()){//若当前与目标相等则继续比较,并合并单元格,隐藏多余单元格
								rowspan++;
								startrows.attr("rowspan",rowspan);
								targetrows.attr("style","display:none");
							}else{//若不相等则当前单元格等于目标单元格,继续向下比较
								rowspan=1;
								startrows = targetrows;
							}
						}else{
							rowspan=1;
							startrows = targetrows;
						}
					}
					
				}
			}
		});

  

 

posted on 2020-07-28 16:35  ContinueW  阅读(452)  评论(0)    收藏  举报