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 相关文章推荐
JavaScript Base64编码和解码,实现URL参数传递。
Sep 18 Javascript
JavaScript 选中文字并响应获取的实现代码
Aug 28 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
Mar 10 Javascript
vue.js入门教程之绑定class和style样式
Sep 02 Javascript
对javascript继承的理解
Oct 11 Javascript
VueJS全面解析
Nov 10 Javascript
详解微信小程序Radio选中样式切换
Jul 06 Javascript
详解Koa中更方便简单发送响应的方式
Jul 20 Javascript
JavaScript实现京东放大镜效果
Dec 03 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
Sep 24 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
Nov 10 Javascript
微信小程序tab左右滑动切换功能的实现代码
Feb 08 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实现读取内存顺序号
2015/03/29 PHP
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
js查错流程归纳
2012/05/04 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
使用javascript做在线算法编程
2018/05/25 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
利用Python为iOS10生成图标和截屏
2016/09/24 Python
回调函数的意义以及python实现实例
2017/06/20 Python
python3.5绘制随机漫步图
2018/08/27 Python
Django上使用数据可视化利器Bokeh解析
2019/07/31 Python
对YOLOv3模型调用时候的python接口详解
2019/08/26 Python
浅析Python3 pip换源问题
2020/01/06 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
社区包粽子活动方案
2014/01/21 职场文书
大型活动组织方案
2014/05/10 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
学生会招新宣传语
2015/07/13 职场文书
大学开学感言
2015/08/01 职场文书
解决Goland 同一个package中函数互相调用的问题
2021/05/06 Golang
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技