当前位置:首页 > JavaScript

js实现表格合并

2026-03-15 15:23:33JavaScript

合并表格单元格的基本方法

使用原生JavaScript合并表格单元格通常需要操作DOM元素,通过设置rowSpancolSpan属性实现。以下是一个基础示例:

function mergeCells(tableId, startRow, endRow, col) {
  const table = document.getElementById(tableId);
  for (let i = startRow; i < endRow; i++) {
    const cell = table.rows[i].cells[col];
    if (cell) {
      cell.style.display = 'none';
      table.rows[startRow].cells[col].rowSpan++;
    }
  }
}

动态检测内容合并

自动合并相同内容的相邻单元格更实用。以下方法可检测列内容相同的连续行进行合并:

function autoMerge(tableId, columnIndex) {
  const table = document.getElementById(tableId);
  let previousValue = null;
  let startRow = 0;

  for (let i = 0; i < table.rows.length; i++) {
    const currentValue = table.rows[i].cells[columnIndex].textContent;
    if (currentValue === previousValue) {
      table.rows[i].cells[columnIndex].style.display = 'none';
      table.rows[startRow].cells[columnIndex].rowSpan++;
    } else {
      startRow = i;
      previousValue = currentValue;
    }
  }
}

多列合并处理

处理多列合并时需要更复杂的逻辑,以下示例展示如何同时处理行和列合并:

function multiMerge(tableId) {
  const table = document.getElementById(tableId);
  const mergeMap = {};

  // 扫描所有单元格建立合并映射
  for (let r = 0; r < table.rows.length; r++) {
    for (let c = 0; c < table.rows[r].cells.length; c++) {
      const cell = table.rows[r].cells[c];
      const value = cell.textContent;
      if (!mergeMap[value]) mergeMap[value] = [];
      mergeMap[value].push({row: r, col: c});
    }
  }

  // 执行合并
  Object.values(mergeMap).forEach(group => {
    if (group.length > 1) {
      const firstCell = table.rows[group[0].row].cells[group[0].col];
      firstCell.rowSpan = group[group.length-1].row - group[0].row + 1;
      for (let i = 1; i < group.length; i++) {
        table.rows[group[i].row].cells[group[i].col].style.display = 'none';
      }
    }
  });
}

使用jQuery简化操作

如果项目中已引入jQuery,合并操作可以更简洁:

js实现表格合并

function jQueryMerge(tableSelector, columnIndex) {
  let prevValue = '';
  let $prevCell = null;

  $(tableSelector + ' tr').each(function() {
    const $cell = $(this).find('td').eq(columnIndex);
    const currentValue = $cell.text();

    if (currentValue === prevValue) {
      $cell.hide();
      $prevCell.attr('rowSpan', parseInt($prevCell.attr('rowSpan') || 1) + 1);
    } else {
      prevValue = currentValue;
      $prevCell = $cell;
    }
  });
}

注意事项

  • 合并操作应在DOM加载完成后执行,通常放在DOMContentLoaded事件中
  • 动态生成的表格需要在数据渲染完成后调用合并函数
  • 合并后会影响表格结构,可能需要对样式进行额外调整
  • 大量数据合并可能影响性能,建议分批处理

完整示例

<table id="dataTable">
  <tr><td>A</td><td>1</td></tr>
  <tr><td>A</td><td>2</td></tr>
  <tr><td>B</td><td>3</td></tr>
</table>

<script>
document.addEventListener('DOMContentLoaded', () => {
  autoMerge('dataTable', 0);
});
</script>

以上方法提供了不同场景下的表格合并解决方案,可根据实际需求选择适合的方式或组合使用。

标签: 表格js
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

vue实现表格复选

vue实现表格复选

实现表格复选的基本思路 在Vue中实现表格复选功能,通常需要结合v-model绑定选中状态,监听复选框变化事件,以及维护一个选中项的数组。以下是具体实现方法: 基础实现步骤 数据准备 定义表格数据和…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…