讲师中心 微信公众号
AI工具推荐 视频效率加速

如何实现初级项目中的表格排序功能_用JavaScript给表格添加排序功能

落敏大大_9043

落敏大大_9043

发布时间:2026-02-02 11:39:23

|

1031人浏览过

|

来源于php中文网

原创

用原生 JavaScript 实现表格排序需监听表头点击事件(事件委托)、通过 Array.from(tbody.rows) 转换 HTMLCollection 为数组、按列索引提取 textContent 并处理数字/空值,再用 sort() 排序后重插 DOM;注意 IE 兼容性、大数据量节流及复杂表头场景下的数据行筛选。

如何实现初级项目中的表格排序功能_用javascript给表格添加排序功能

直接给表格加排序,不需要引入任何库,用原生 sort() 配合 Array.from() 和 dataset 就能搞定,但关键在「点哪一列就排哪一列」和「切换升/降序」这两个逻辑容易写错。

点击表头触发排序:监听 th 的 click 事件

不要给每个 th 单独绑定事件,用事件委托最稳妥——监听整个 thead 或 table,再判断 event.target 是否为 th:

document.querySelector('table').addEventListener('click', e => {
  if (e.target.tagName === 'TH') {
    const columnIndex = Array.from(e.target.parentNode.children).indexOf(e.target);
    sortTableByColumn(columnIndex);
  }
});

注意:e.target 可能是 th 里的文字或图标,所以要用 e.target.closest('th') 更安全;columnIndex 是从 0 开始的列索引,后续用于取 td 值。

提取并排序数据行:Array.from(tbody.rows) 是关键

tbody.rows 是 HTMLCollection,不能直接调用 sort(),必须转成数组。常见错误是漏掉这一步,导致排序无效:

立即学习“Java免费学习笔记(深入)”;

JavaStoryDevelop
JavaStoryDevelop

你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在

下载
  • 用 Array.from(tbody.rows) 或 [...tbody.rows] 转数组
  • 排序前先用 rows.forEach(row => tbody.removeChild(row)) 清空旧顺序(否则 append 会追加)
  • 排序函数里用 row.cells[columnIndex].textContent.trim() 取值,注意去空格
  • 数字列要转 Number(),否则按字符串排(比如 "10"

维护排序状态:用 th.dataset.sort 记录当前方向

每次点击同一列,要在升序 ↔ 降序之间切换。别用全局变量存状态,把状态挂到 th 上最干净:

function sortTableByColumn(index) {
  const th = document.querySelectorAll('th')[index];
  const direction = th.dataset.sort === 'asc' ? 'desc' : 'asc';
  th.dataset.sort = direction;

  // 排序逻辑...
  rows.sort((a, b) => {
    let aVal = a.cells[index].textContent.trim();
    let bVal = b.cells[index].textContent.trim();
    if (!isNaN(aVal) && !isNaN(bVal)) {
      aVal = Number(aVal); bVal = Number(bVal);
    }
    return direction === 'asc' ? aVal > bVal : aVal < bVal;
  });
}

注意:aVal > bVal 返回布尔值,但 sort() 需要返回 -1 / 0 / 1,更稳妥写法是 (aVal bVal ? 1 : 0);如果列里混有空值或“-”,得提前处理,否则 NaN 会导致排序错乱。

IE 兼容性和性能提醒

IE11 不支持 dataset(可用 getAttribute('data-sort') 替代),也不支持箭头函数和展开运算符;如果目标用户还用 IE,就别用 [...rows],改用 Array.prototype.slice.call(rows)。

表格超过 500 行时,每次点击都重排 + 重插 DOM 会卡顿。真实项目里建议加节流,或只对前端展示做虚拟排序(不操作 DOM,用 display: none 控制可见行)。

最常被忽略的是:表头合并(colspan)、固定表头、服务端分页这些场景下,直接操作 tbody.rows 会出错——排序前务必确认你操作的是实际参与排序的数据行,而不是所有 tr。

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6104

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3004

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1792

2025.10.17

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

1138

2023.09.04

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

778

2025.12.04

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

4625

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

1930

2025.09.18

c++ 全局变量
c++ 全局变量

本专题整合了c++全局变量的使用、定义、作用域等等内容,阅读专题下面的文章了解更多详细内容。

199

2026.03.17

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn