当前位置:首页 > JavaScript

js实现表格排序

2026-04-04 01:09:46JavaScript

实现表格排序的方法

获取表格数据

使用 document.querySelectordocument.getElementById 获取表格元素。通过遍历表格的行和列,将数据提取到一个数组中。

const table = document.getElementById('myTable');
const rows = Array.from(table.querySelectorAll('tr'));
const headers = rows[0].querySelectorAll('th');
const data = rows.slice(1).map(row => {
  const cells = row.querySelectorAll('td');
  return Array.from(cells).map(cell => cell.textContent);
});

排序函数

根据列索引和排序方向(升序或降序)对数据进行排序。可以使用 Array.prototype.sort 方法。

function sortTable(columnIndex, ascending = true) {
  data.sort((a, b) => {
    const valA = a[columnIndex];
    const valB = b[columnIndex];
    if (valA < valB) return ascending ? -1 : 1;
    if (valA > valB) return ascending ? 1 : -1;
    return 0;
  });
}

更新表格

排序完成后,重新渲染表格内容。清空表格的现有行,然后根据排序后的数据重新填充。

function updateTable() {
  const tbody = table.querySelector('tbody');
  tbody.innerHTML = '';
  data.forEach(row => {
    const tr = document.createElement('tr');
    row.forEach(cell => {
      const td = document.createElement('td');
      td.textContent = cell;
      tr.appendChild(td);
    });
    tbody.appendChild(tr);
  });
}

添加排序事件

为表头添加点击事件,点击时触发排序并更新表格。可以通过 data-order 属性记录当前排序方向。

headers.forEach((header, index) => {
  header.addEventListener('click', () => {
    const currentOrder = header.getAttribute('data-order');
    const ascending = currentOrder === 'asc' ? false : true;
    sortTable(index, ascending);
    updateTable();
    header.setAttribute('data-order', ascending ? 'asc' : 'desc');
  });
});

完整示例

将上述代码整合为一个完整的实现示例。确保表格具有 id="myTable" 并包含 <thead><tbody> 结构。

<table id="myTable">
  <thead>
    <tr>
      <th data-order="asc">Name</th>
      <th data-order="asc">Age</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Alice</td>
      <td>25</td>
    </tr>
    <tr>
      <td>Bob</td>
      <td>30</td>
    </tr>
  </tbody>
</table>

处理数字和日期

对于数字或日期列,排序前需要将字符串转换为相应的类型。修改 sortTable 函数以支持不同类型的数据。

function sortTable(columnIndex, ascending = true) {
  data.sort((a, b) => {
    const valA = isNaN(a[columnIndex]) ? a[columnIndex] : Number(a[columnIndex]);
    const valB = isNaN(b[columnIndex]) ? b[columnIndex] : Number(b[columnIndex]);
    if (valA < valB) return ascending ? -1 : 1;
    if (valA > valB) return ascending ? 1 : -1;
    return 0;
  });
}

性能优化

对于大型表格,可以考虑使用虚拟滚动或分页加载数据。避免频繁操作 DOM,减少重绘和回流。

js实现表格排序

兼容性

确保代码在现代浏览器中正常运行。如需支持旧版浏览器,可以使用 polyfillBabel 转译代码。

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

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

vue element实现表格

vue element实现表格

Vue + Element UI 实现表格 Element UI 提供了强大的表格组件 el-table,结合 Vue 可以快速实现数据展示、排序、筛选等功能。 基础表格实现 安装 Element…

vue实现表格复选

vue实现表格复选

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

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…