由于在开发中,遇到一个复杂的表格开发需求,后端返回的数据是多条的,但是前端的表格中需要根据相同的行(row)中具体的列(col)的数据一致,来合并具体的单元格。效果如下图。
那么一个具体的思路是:
- 先获取table的一个dom节点
- 然后获取table的rows行
- 根据rows行遍历,然后遍历需要合并的列(col)
- 如果当前行的具体列的数据和下一行的具体列的数据一致,那么下一行的具体列加上一个移除标识,方便后期移除
- 然后递归遍历是否含有这个标识,如果有就重新递归,没有就rowSpan+1
// table的id 需要合并的列(从0开始算)function mergeCell(tableId, cols) {var table = document.getElementById('my-table');var table_rows = table.rows;// 需要合并的列的数组cols.forEach((v, k) => {// 循环table每一行for (let i = 0; i < table_rows.length - 1; i++) {// rowlet now_row = table_rows[i];let next_row = table_rows[i + 1];// collet now_col = now_row.cells[v];let next_col = next_row.cells[v];if (now_col.innerHTML == next_col.innerHTML) {// 标记为需要删除$(next_col).addClass('remove');// 递归判断当前对象时候已经被删除setParentSpan(table, i, v);}}})$(".remove").remove();}// (递归方法,用于多行统计) pram => table表格 当前行 对应的列function setParentSpan(table, row, col) {var col_item = table.rows[row].cells[col];if ($(col_item).hasClass('remove')) {setParentSpan(table, --row, col)} else {col_item.rowSpan += 1;}}// 合并单元格(合并第0 1 2 3 4 8)列mergeCell('my-table', [0, 1,2,3,4,8]);
