java js合并,JS合并单元格

在Web中经常需要合并单元格,例如对于下面一个表格:

table,

table tr th,

table tr td {

border: 1px solid #0094ff;

}

表头1表头2表头3表头4

列1列2列3列4列1列2列3列4列1列2列3列4

表格原来样式:

40fc41a3834f3430105181537b614864.png

合并的JS方法:(可以作为一个工具方法)

1、纵向合并,也就是对同一列的相邻行单元格相同的进行合并

/**

* 合并单元格(如果结束行传0代表合并所有行)

* @param table1 表格的ID

* @param startRow 起始行

* @param endRow 结束行

* @param col 合并的列号,对第几列进行合并(从0开始)。第一行从0开始

*/

function mergeCell(table1, startRow, endRow, col) {

var tb = document.getElementById(table1);

if(!tb || !tb.rows || tb.rows.length <= 0) {

return;

}

if(col >= tb.rows[0].cells.length || (startRow >= endRow && endRow != 0)) {

return;

}

if(endRow == 0) {

endRow = tb.rows.length - 1;

}

for(var i = startRow; i < endRow; i++) {

if(tb.rows[startRow].cells[col].innerHTML == tb.rows[i + 1].cells[col].innerHTML) { //如果相等就合并单元格,合并之后跳过下一行

tb.rows[i + 1].removeChild(tb.rows[i + 1].cells[col]);

tb.rows[startRow].cells[col].rowSpan = (tb.rows[startRow].cells[col].rowSpan) + 1;

} else {

mergeCell(table1, i + 1, endRow, col);

break;

}

}

}

例如上面:

mergeCell('test1', 0, 0, 3);

结果

c6acc29a03b82b1af97d38725168dd93.png

补充:如果想合并多列可以多次调用此方法,但是需要注意先合并后面的列,再合并前面的列

(1)合并多列正确用法

mergeCell('test1', 0, 0, 3);

mergeCell('test1', 0, 0, 2);

mergeCell('test1', 0, 0, 1);

46251d4c8a0587bd9ed2b219a29863ea.png

(2)如果先合并前面的列查看效果

mergeCell('test1', 0, 0, 1);

mergeCell('test1', 0, 0, 2);

mergeCell('test1', 0, 0, 3);

81337f536e9dd6d35e4ec33b3e756e91.png

https://www.cnblogs.com/qlqwjy/category/1035591.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端代码: ```html <table> <thead> <tr> <th>姓名</th> <th>年龄</th> <th>性别</th> </tr> </thead> <tbody> <tr> <td rowspan="2">张三</td> <td>25</td> <td>男</td> </tr> <tr> <td>30</td> <td>男</td> </tr> <tr> <td>李四</td> <td>28</td> <td>女</td> </tr> <tr> <td colspan="3">总人数:3</td> </tr> </tbody> </table> <button onclick="mergeCells()">合并单元格</button> ``` 上面的代码中,我们使用了HTML中的`rowspan`和`colspan`属性来合并单元格,并添加了一个按钮用于触发合并单元格的函数。 下面是JavaScript代码: ```javascript function mergeCells() { var table = document.getElementsByTagName('table')[0]; var rows = table.rows; var rowNum = rows.length; var colNum = rows[0].cells.length; var mergedCells = []; // 遍历表格,寻找可以合并的单元格 for (var i = 0; i < rowNum; i++) { for (var j = 0; j < colNum; j++) { var cell = rows[i].cells[j]; if (cell.innerHTML !== '') { var rowspan = cell.getAttribute('rowspan') || 1; var colspan = cell.getAttribute('colspan') || 1; rowspan = parseInt(rowspan); colspan = parseInt(colspan); for (var r = 0; r < rowspan; r++) { for (var c = 0; c < colspan; c++) { if (r === 0 && c === 0) { continue; } var mergedRow = rows[i + r]; if (!mergedRow) { mergedRow = document.createElement('tr'); table.appendChild(mergedRow); } var mergedCell = mergedRow.cells[j + c]; if (!mergedCell) { mergedCell = document.createElement('td'); mergedRow.appendChild(mergedCell); } mergedCell.style.display = 'none'; mergedCells.push(mergedCell); } } } } } // 合并单元格 for (var i = 0; i < mergedCells.length; i++) { var mergedCell = mergedCells[i]; var nextCell = mergedCell.nextSibling; while (nextCell && nextCell.style.display === 'none') { nextCell = nextCell.nextSibling; } mergedCell.colSpan = nextCell.cellIndex - mergedCell.cellIndex + 1; mergedCell.style.display = ''; } } ``` 该函数首先获取表格的行数和列数,然后遍历表格,寻找可以合并的单元格,并将需要合并的单元格保存在`mergedCells`数组中。最后,再次遍历`mergedCells`数组,将需要合并的单元格合并起来。 后端Java代码: ```java public class MergeCells { public static void main(String[] args) { String[][] data = { {"张三", "25", "男"}, {"", "30", "男"}, {"李四", "28", "女"} }; int[] rowspan = new int[data.length]; int[] colspan = new int[data[0].length]; rowspan[0] = 2; colspan[2] = 3; String[][] mergedData = mergeCells(data, rowspan, colspan); printTable(mergedData); } private static String[][] mergeCells(String[][] data, int[] rowspan, int[] colspan) { int mergedRows = 0; int mergedCols = 0; for (int i = 0; i < rowspan.length; i++) { mergedRows += rowspan[i]; } for (int i = 0; i < colspan.length; i++) { mergedCols += colspan[i]; } String[][] mergedData = new String[mergedRows][mergedCols]; int rowOffset = 0; for (int i = 0; i < data.length; i++) { int colOffset = 0; for (int j = 0; j < data[i].length; j++) { if (rowspan[i] > 1 || colspan[j] > 1) { for (int r = 0; r < rowspan[i]; r++) { for (int c = 0; c < colspan[j]; c++) { if (r == 0 && c == 0) { mergedData[r + rowOffset][j + colOffset] = data[i][j]; } else { mergedData[r + rowOffset][c + j + colOffset] = ""; } } } colOffset += colspan[j] - 1; } else { mergedData[rowOffset][j + colOffset] = data[i][j]; } } rowOffset += rowspan[i]; } return mergedData; } private static void printTable(String[][] data) { for (int i = 0; i < data.length; i++) { for (int j = 0; j < data[i].length; j++) { System.out.print(data[i][j] + "\t"); } System.out.println(); } } } ``` 该代码使用了一个`mergeCells`函数来合并单元格,该函数接受一个二维数组`data`和两个一维数组`rowspan`和`colspan`作为参数,分别表示每个单元格的行跨度和列跨度。该函数首先计算出合并后表格的行数和列数,然后遍历`data`数组,将需要合并的单元格合并起来,并将结果保存在一个新的二维数组`mergedData`中。最后,该函数返回`mergedData`数组。 我们还编写了一个`printTable`函数用于打印表格,以便我们可以检查表格是否正确合并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值