首页 > 编程语言 >【JavaScript】纯JavaScript实现单元格合并

【JavaScript】纯JavaScript实现单元格合并

时间:2022-10-03 10:31:23浏览次数:55  
标签:count rows ++ cells JavaScript 合并 var tb 单元格

2016年的文章,当时在网上找到两种JavaScript合并页面单元格的方法(由于是先实现后总结的方式,所以很多时候忘记了原出处,侵权删),两种方法分别是两种实现思路,在案例中都将其整合到一块了。

其中,方法一更适合于页面动态新增时使用,在单元格合并之前会有检测表格是否完整的过程。而方法二则适合页面加载时执行。

废话不多说,直接上代码。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>单元格合并demo</title>
<script>

// ---------------- 方法一 ----------------
function uniteTable(tb, colLength) {
if (!checkTable(tb))
return;
var i = 0;
var j = 0;
var rowCount = tb.rows.length; // 行数
var colCount = tb.rows[0].cells.length; // 列数
var obj1 = null;
var obj2 = null;
// 为每个单元格命名
for (i = 0; i < rowCount; i++) {
for (j = 0; j < colCount; j++) {
tb.rows[i].cells[j].id = "tb__" + i.toString() + "_" + j.toString();
}
}
// 逐列检查合并
for (i = 0; i < colCount; i++) {
if (i == colLength)
return;
obj1 = document.getElementById("tb__0_" + i.toString());
for (j = 1; j < rowCount; j++) {
obj2 = document.getElementById("tb__" + j.toString() + "_" + i.toString());
if (obj1.innerText == obj2.innerText) {
obj1.rowSpan++;
obj2.parentNode.removeChild(obj2);
} else {
obj1 = document.getElementById("tb__" + j.toString() + "_" + i.toString());
}
}
}
}
// 检查表格是否规整
function checkTable(tb) {
if (tb.rows.length == 0) return false;
if (tb.rows[0].cells.length == 0) return false;
for (var i = 0; i < tb.rows.length; i++) {
if (tb.rows[0].cells.length != tb.rows[i].cells.length) return false;
}
return true;
}


// ---------------- 方法二 ----------------
function uniteTable2(tab,colLength){
var maxCol = colLength,val, count, start;
for (var col = maxCol - 1; col >= 0; col--) {
count = 1;
val = "";
for (var i = 0; i < tab.rows.length; i++) {
if (val == tab.rows[i].cells[col].innerHTML) {
count++;
} else {
if (count > 1) { //合并
start = i - count;
tab.rows[start].cells[col].rowSpan = count;
for (var j = start + 1; j < i; j++) {
tab.rows[j].cells[col].style.display = "none";
}
count = 1;
}
val = tab.rows[i].cells[col].innerHTML;
}
}
if (count > 1) { //合并,最后几行相同的情况下
start = i - count;
tab.rows[start].cells[col].rowSpan = count;
for (var j = start + 1; j < i; j++) {
tab.rows[j].cells[col].style.display = "none";
}
}
}
}
</script>
</head>

<body>
<table width="400" border="1" id="table1">
<tr><td>a</td><td>for</td><td>100</td><td>200</td></tr>
<tr><td>a</td><td>for</td><td>150</td><td>230</td></tr>
<tr><td>a</td><td>if</td><td>100</td><td>200</td></tr>
<tr><td>a</td><td>if</td><td>300</td><td>240</td></tr>
<tr><td>a</td><td>if</td><td>320</td><td>230</td></tr>
</table>
<br>
<!-- 这里的uniteTable2可以直接换成uniteTable来验证 -->
<input type="button" value="合并表格" onClick="uniteTable2(table1,2)">
</body>
</html>

标签:count,rows,++,cells,JavaScript,合并,var,tb,单元格
From: https://blog.51cto.com/u_15761576/5729934

相关文章

  • 一个编写测试键盘的javascript程序和测试键盘的程序
    代码很简单,直接上代码:<!DOCTYPEhtml><html><head><title>Keyboardinput</title></head><body><canvasid='canvas'width='700'he......
  • JavaScript新手需要注意的事项
    verible如果一个变量没有使用var关键字进行声明的话,那么这个变量就是全局变量,在ES6中,添加了useStrict来解决这一个痛点,只需要在代码中加入usestrict`usestrict`i=......
  • day08 --> (Javascript)
    JavaScript:概念:是一门客户端脚本语言。运行在客户端浏览器中,每一个浏览器都有JavaScript的解析引擎脚本语言:不需要编译、直接就可以被浏览器解析执行。功能: 可以来增......
  • javascript>=和<=
    一个条件都不满足为false,至少满足一个条件为truevara=10console.log(a>10);//false;console.log(a<10);//false;console.log(a==10);//trueconsole.log(a>=10);//true1......
  • 1105 链表合并——25分
    给定两个单链表L1=a1→a2→⋯→an−1→an和L2=b1→b2→⋯→bm−1→bm。如果n≥2m,你的任务是将⽐较短的那个链表逆序,然后将之并⼊⽐较⻓的那个链表,得到⼀个形如a1→a2......
  • SAS - 合并数据集(二)
    在两个数据集没有共同变量的情况下,合并只有一行数据的dataset和包含多行数据的dataset。比如,对一个数据集进行procmeans计算,只有一行结果,此时想要计算原始数据和pro......
  • 多Csv文件合并
    问题:同一文件夹内的多个Csv文件,需要合并到一个工作表里。示例工作簿在C盘下的数据源文件夹中,每列标题分别为:标题1、标题2、标题3let源=Folder.Files("C:\数据源")......
  • javascript: get Operating System version
    javascript:<scripttype="text/ecmascript">console.log(navigator.userAgent)console.log(navigator.appVersion)console.log(navigator.platform) //Mozilla/5.0......
  • 003.JavaScript的数据类型
         ......
  • JavaScript中this指向哪儿?如何确定this?-前端面试进阶
    前言只要你踏入JavaScript的世界,那么你一定会遇到this关键词。有许多人所this是JavaScript中最复杂的东西之一,也有人说this其实很简单......但是事实确实,有许多工......