JQuery实现表格中相同单元格合并示例代码


Posted in Javascript onJune 26, 2013

代码:

<!DOCTYPE html> 
<html> 
<head> 
<title>merge.html</title> 
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
<meta http-equiv="description" content="this is my page"> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
<link rel="stylesheet" href="css/jquery-ui.css" /> 
<script src="js/jquery.js"></script> 
<script src="js/jquery-ui.js"></script> 
<script type="text/javascript"> 
function merge1(){ //可实现单元格,通过给 开始cell的比较 
var totalRow = $("#tbl").find("tr").length; 
var totalCol = $("#tbl").find("tr").eq(0).find("td").length; 
for(var col=totalCol-1;col>=1;col--){ 
spanNum =1; 
startCell = $("#tbl").find("tr").eq(totalRow-1).find("td").eq(col); 
for(var row = totalRow-1;row>=1;row--){ 
targetCell = $("#tbl").find("tr").eq(row-1).find("td").eq(col); 
if(startCell.text() == targetCell.text() && startCell.text()!=""){ 
spanNum++; 
targetCell.attr("rowSpan",spanNum); 
startCell.remove(); 
}else{ 
spanNum =1; 
} 
startCell = targetCell; 
} 
} 
} 
function merge2() { //可实现合并单元格,上下行来比较 
var totalCols = $("#tbl").find("tr:eq(0)").find("td").length; 
var totalRows = $("#tbl").find("tr").length; 
for ( var i = totalCols-1; i >= 1; i--) { 
for ( var j = totalRows-1; j >= 1; j--) { 
startCell = $("#tbl").find("tr").eq(j).find("td").eq(i); 
targetCell = $("#tbl").find("tr").eq(j - 1).find("td").eq(i); 
if (startCell.text() == targetCell.text() && targetCell.text() != "") { 
targetCell.attr("rowSpan", (startCell.attr("rowSpan")==undefined)?2:(eval(startCell.attr("rowSpan"))+1)); 
startCell.remove(); 
} 
} 
} 
} 
/*先合并,使用style 的display:none将相同元素隐藏,然后再remove 
*/ 
function merge3(){ 
var totalCols = $("#tbl").find("tr:eq(0)").find("td").length; 
var totalRows = $("#tbl").find("tr").length; 
for(var col=totalCols-1;col>=1;col--){ 
spanNum =1; 
startCell = $("#tbl").find("tr").eq(totalRows-1).find("td").eq(col); 
for(var row = totalRows-1;row>=1;row--){ 
targetCell = $("#tbl").find("tr").eq(row-1).find("td").eq(col); 
if(startCell.text() == targetCell.text() && startCell.text()!=""){ 
spanNum++; 
targetCell.attr("rowSpan",spanNum); 
startCell.attr("style","visibility:hidden"); 
// startCell.attr("style","display:none"); 
}else{ 
spanNum =1; 
} 
startCell = targetCell; 
} 
} 
for(var j=totalCols-1;j>=1;j--){ 
for(var i=totalRows-1;i>=1;i--){ 
cell = $("#tbl").find("tr").eq(i).find("td").eq(j); 
if(cell.attr("style")!=undefined){ 
if(cell.attr("style")=="visibility:hidden"){ 
cell.remove(); 
} 
} 
} 
} 
} 
function merge4(){ //与merge3方法类似,目的是看一下 display:none与visibility:hidden的效果区别 
var totalCols = $("#tbl").find("tr:eq(0)").find("td").length; 
var totalRows = $("#tbl").find("tr").length; 
for(var col=totalCols-1;col>=1;col--){ 
spanNum =1; 
startCell = $("#tbl").find("tr").eq(totalRows-1).find("td").eq(col); 
for(var row = totalRows-1;row>=1;row--){ 
targetCell = $("#tbl").find("tr").eq(row-1).find("td").eq(col); 
if(startCell.text() == targetCell.text() && startCell.text()!=""){ 
spanNum++; 
targetCell.attr("rowSpan",spanNum); 
startCell.attr("style","display:none"); 
// startCell.attr("style","display:none"); 
}else{ 
spanNum =1; 
} 
startCell = targetCell; 
} 
} 
for(var j=totalCols-1;j>=1;j--){ 
for(var i=totalRows-1;i>=1;i--){ 
cell = $("#tbl").find("tr").eq(i).find("td").eq(j); 
if(cell.attr("style")!=undefined){ 
if(cell.attr("style")=="display:none"){ 
cell.remove(); 
} 
} 
} 
} 
} 
</script> 
</head> 
<body> 
<table id="tbl" cellpadding="3" border=1> 
<thead> 
<tr> 
<td>销售时间</td> 
<td>裙子</td> 
<td>裤子</td> 
<td>风衣</td> 
<td>鞋子</td> 
</tr> 
</thead> 
<tbody> 
<tr> 
<td>8:00-9:00</td> 
<td>3</td> 
<td></td> 
<td>4</td> 
<td></td> 
</tr> 
<tr> 
<td>9:00-10:00</td> 
<td>3</td> 
<td>2</td> 
<td>5</td> 
<td>3</td> 
</tr> 
<tr> 
<td>10:00-11:00</td> 
<td>3</td> 
<td>2</td> 
<td></td> 
<td>1</td> 
</tr> 
<tr> 
<td>11:00-12:00</td> 
<td></td> 
<td></td> 
<td></td> 
<td>1</td> 
</tr> 
</tbody> 
</table> 
<input type="button" value="合并" id="merge" onclick="merge2();"> 
</body> 
</html>

总结:在使用remove的时候,一定要注意如果 从list的开始元素循环下去,remove掉一个元素后,有些元素就找不到了或者说不是要找的那个元素;最好是从后面开始循环。
Javascript 相关文章推荐
js检测客户端不是firefox则提示下载
Apr 07 Javascript
javascript 有趣而诡异的数组
Apr 06 Javascript
jQuery实现下拉框选择图片功能实例
Aug 08 Javascript
Javascrip实现文字跳动特效
Nov 27 Javascript
Node.js学习之地址解析模块URL的使用详解
Sep 28 Javascript
微信小程序实现图片放大预览功能
Oct 22 Javascript
浅谈Vue下使用百度地图的简易方法
Mar 23 Javascript
jQuery实现的老虎机跑动效果示例
Dec 29 jQuery
实例讲解v-if和v-show的区别
Jan 31 Javascript
Vue 中可以定义组件模版的几种方式
Aug 06 Javascript
Vue如何提升首屏加载速度实例解析
Jun 25 Javascript
八种Vue组件间通讯方式合集(推荐)
Aug 18 Javascript
基于js disabled=&quot;false&quot;不起作用的解决办法
Jun 26 #Javascript
jQuery实现类似淘宝购物车全选状态示例
Jun 26 #Javascript
如何让页面加载完成后执行js
Jun 26 #Javascript
文件编码导致jquery失效的解决方法
Jun 26 #Javascript
解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
Jun 26 #Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 #Javascript
中文路径导致unitpngfix.js不正常的解决方法
Jun 26 #Javascript
You might like
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
微信小程序 数据遍历的实现
2017/04/05 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
从零学Python之引用和类属性的初步理解
2014/05/15 Python
Python中使用item()方法遍历字典的例子
2014/08/26 Python
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
Python编程之序列操作实例详解
2017/07/22 Python
python支付宝支付示例详解
2019/08/22 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
如何在django中运行scrapy框架
2020/04/22 Python
Python Web项目Cherrypy使用方法镜像
2020/11/05 Python
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
《阳光》教学反思
2014/02/23 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
公积金具结保证书
2015/05/11 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
Python 用户输入和while循环的操作
2021/05/23 Python
Win10 Anaconda安装python-pcl
2022/04/29 Servers
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android