当 HTML 表有很多数据时,使信息列可排序会很有用。

以下技术使用 JavaScript 通过单击列标题对表行进行排序。

这是一个所有列都可排序的示例表。第二次单击同一列标题文本会反转排序。

Author Title Rating Review Date
John Irving The cider house rules 6 January 31, 11
Kate Atkinson When will there be good news? 7 Nov. 31, 2001
Kathy Hogan Trocheck Every Crooked Nanny 2 10.21.21
Orson Scott Card The Memory Of Earth 2 10/14/11
Sarah-Kate Lynch Blessed Are The Cheesemakers 9 1-12-2011
Stieg Larsson The Girl With The Dragon Tattoo 2 August 3, 2022

JavaScript 有一个地方可以自定义,table 标签的 id 值。每个可排序列的表头文本都链接到 JavaScript。

如果你想重现这个例子,这里是表格代码。(本文后面将讨论的某些部分用红色表示。)

<!DOCTYPE html>
<!--
Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
Click nbfs://nbhost/SystemFileSystem/Templates/ClientSide/html.html to edit this template
-->
<html><head><title>TODO supply a title</title><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"></head><body><table id="indextable" border="1" cellpadding="10" cellspacing="0" style="border-collapse:collapse;"><thead><tr><th><a href="javascript:SortTable(0,'T');">Author</a></th><th><a href="javascript:SortTable(1,'T');">Title</a></th><th><a href="javascript:SortTable(2,'N');">Rating</a></th><th><a href="javascript:SortTable(3,'D','mdy');">Review Date</a></th></tr></thead><tbody><tr><td>Orson Scott Card</td><td>The Memory Of Earth</td><td align="center">2</td><td>10/14/11</td></tr><tr><td>Sarah-Kate Lynch</td><td>Blessed Are The Cheesemakers</td><td align="center">9</td><td>1-12-2011</td></tr><tr><td>John Irving</td><td>The cider house rules</td><td align="center">6</td><td>January 31, 11</td></tr><tr><td>Kate Atkinson</td><td>When will there be good news?</td><td align="center">7</td><td>Nov. 31, 2001</td></tr><tr><td>Kathy Hogan Trocheck</td><td>Every Crooked Nanny</td><td align="center">2</td><td>10.21.21</td></tr><tr><td>Stieg Larsson</td><td>The Girl With The Dragon Tattoo</td><td align="center">2</td><td>August 3, 2022</td></tr></tbody></table><script type="text/javascript">/*Willmaster Table SortVersion 1.1August 17, 2016Updated GetDateSortingKey() to correctly sort two-digit months and days numbers with leading 0.Version 1.0, July 3, 2011Will Bontragerhttps://www.willmaster.com/Copyright 2011,2016 Will Bontrager Software, LLCThis software is provided "AS IS," withoutany warranty of any kind, without even anyimplied warranty such as merchantabilityor fitness for a particular purpose.Will Bontrager Software, LLC grantsyou a royalty free license to use ormodify this software provided thisnotice appears on all copies.*///// One placed to customize - The id value of the table tag.var TableIDvalue = "indextable";////var TableLastSortedColumn = -1;function SortTable() {var sortColumn = parseInt(arguments[0]);var type = arguments.length > 1 ? arguments[1] : 'T';var dateformat = arguments.length > 2 ? arguments[2] : '';var table = document.getElementById(TableIDvalue);var tbody = table.getElementsByTagName("tbody")[0];var rows = tbody.getElementsByTagName("tr");var arrayOfRows = new Array();type = type.toUpperCase();dateformat = dateformat.toLowerCase();for (var i = 0, len = rows.length; i < len; i++) {arrayOfRows[i] = new Object;arrayOfRows[i].oldIndex = i;var celltext = rows[i].getElementsByTagName("td")[sortColumn].innerHTML.replace(/<[^>]*>/g, "");if (type == 'D') {arrayOfRows[i].value = GetDateSortingKey(dateformat, celltext);} else {var re = type == "N" ? /[^\.\-\+\d]/g : /[^a-zA-Z0-9]/g;arrayOfRows[i].value = celltext.replace(re, "").substr(0, 25).toLowerCase();}}if (sortColumn == TableLastSortedColumn) {arrayOfRows.reverse();} else {TableLastSortedColumn = sortColumn;switch (type) {case "N" :arrayOfRows.sort(CompareRowOfNumbers);break;case "D" :arrayOfRows.sort(CompareRowOfNumbers);break;default  :arrayOfRows.sort(CompareRowOfText);}}var newTableBody = document.createElement("tbody");for (var i = 0, len = arrayOfRows.length; i < len; i++) {newTableBody.appendChild(rows[arrayOfRows[i].oldIndex].cloneNode(true));}table.replaceChild(newTableBody, tbody);} // function SortTable()function CompareRowOfText(a, b) {var aval = a.value;var bval = b.value;return(aval == bval ? 0 : (aval > bval ? 1 : -1));} // function CompareRowOfText()function CompareRowOfNumbers(a, b) {var aval = /\d/.test(a.value) ? parseFloat(a.value) : 0;var bval = /\d/.test(b.value) ? parseFloat(b.value) : 0;return(aval == bval ? 0 : (aval > bval ? 1 : -1));} // function CompareRowOfNumbers()function GetDateSortingKey(format, text) {if (format.length < 1) {return "";}format = format.toLowerCase();text = text.toLowerCase();text = text.replace(/^[^a-z0-9]*/, "");text = text.replace(/[^a-z0-9]*$/, "");if (text.length < 1) {return "";}text = text.replace(/[^a-z0-9]+/g, ",");var date = text.split(",");if (date.length < 3) {return "";}var d = 0, m = 0, y = 0;for (var i = 0; i < 3; i++) {var ts = format.substr(i, 1);if (ts == "d") {d = date[i];} else if (ts == "m") {m = date[i];} else if (ts == "y") {y = date[i];}}d = d.replace(/^0/, "");if (d < 10) {d = "0" + d;}if (/[a-z]/.test(m)) {m = m.substr(0, 3);switch (m) {case "jan" :m = String(1);break;case "feb" :m = String(2);break;case "mar" :m = String(3);break;case "apr" :m = String(4);break;case "may" :m = String(5);break;case "jun" :m = String(6);break;case "jul" :m = String(7);break;case "aug" :m = String(8);break;case "sep" :m = String(9);break;case "oct" :m = String(10);break;case "nov" :m = String(11);break;case "dec" :m = String(12);break;default    :m = String(0);}}m = m.replace(/^0/, "");if (m < 10) {m = "0" + m;}y = parseInt(y);if (y < 100) {y = parseInt(y) + 2000;}return "" + String(y) + "" + String(m) + "" + String(d) + "";} // function GetDateSortingKey()</script></body>
</html>

这是单击标题时进行排序的 JavaScript。JavaScript 可以在网页的任何地方,在 HEAD 或 BODY 区域,在表单的上方或下方。

JavaScript 只有一个地方可以定制,即在 JavaScript 代码中标记的地方。从顶部向下大约 14 行。变量TableIDvalue的值需要是table标签的id值。

在示例中,表格标签的 id 值为“indextable”。因此,JavaScript 中的行读取

var TableIDvalue = "索引表";

当 HTML 表有很多数据时,使信息列可排序会很有用。

实现表排序

要对自己的表进行排序,必须准备好表:

  1. table 标签需要一个 id 值,一个在页面上唯一的值。JavaScript 需要在其一个自定义点中指定 id 值。

  2. 表头区域需要在tad标签之间,正文区域需要在tbody标签之间。

    • 将<thead>标记放在开始表头区域 的<tr>标记之前。

    • 将</thead>标记紧跟在结束表头区域 的</tr>标记之后。

    • 将<tbody>标记放在开始表格正文区域 的<tr>标记之前。

    • 将</tbody>标记紧跟在结束表格主体区域 的</tr>标记之后。

    如果没有 thead 和 tbody 标签,浏览器可能会拒绝排序,或者,如果它确实排序,标题行本身可能会被错误地排序,就好像它是表体行一样。

    使用示例表的代码查看 thead 和 tbody 标记的放置位置。

  3. 要启用排序的列的标题文本需要一个链接。我将向您展示如何制作这些链接。

JavaScript 将对三种不同类型内容的列进行排序:

  1. 文本。
  2. 数字。
  3. 日期。

每种类型的内容的链接在下面各自的部分中进行了说明。

标题文本的链接取决于要排序的列中的内容类型。内容类型被发送到执行排序的 JavaScript 函数。

该链接还取决于列号。列号被发送到执行排序的 JavaScript 函数。最左边的列是第 0 列。接下来是第 1 列。然后是 2。依此类推。

这些链接是常规的 A 标签链接。如果您愿意,可以使用 span 标签。有关操作方法信息,请参阅不带“A”标记的链接文章。

对表格中的文本列进行排序

文本内容可以是任何类型的文本。通常,它至少包含一些字母。

出于排序目的,非字母或数字的字符将被忽略。HTML 标记也被忽略。如果内容大于 25 个可见的字母数字字符,则排序时仅考虑前 25 个。

这是文本列排序链接href值(列号来自示例表):

href="javascript:SortTable(0,'T');"

JavaScript 函数 SortTable() 在对文本列进行排序时采用两个参数:

  1. 列号。最左边的列是数字 0。下一列是数字 1。然后是 2。依此类推。

  2. 内容的类型。为文本内容指定“T”。

这是一个示例实现:

<th><a href="javascript:SortTable(0,'T');">Author</a></th>

对表中的数字列进行排序

一列数字可能有普通数字、整数或小数。这些数字可以带有任何符号。例如,它可能包含货币符号。或“%”字符。

当对数字进行排序时,排序会忽略除数字、小数点、减号和加号之外的任何字符。

这是数字列排序链接href值(列号来自示例表):

href="javascript:SortTable(2,'N');"

JavaScript 函数 SortTable() 在对数字列进行排序时采用两个参数:

  1. 列号。

  2. 内容的类型。指定“N”对一列数字进行排序。

这是一个示例实现:

<th><a href="javascript:SortTable(2,'N');">Rating</a></th>

对表中的日期列进行排序

日期可以用许多不同的方式书写。示例:2012 年 9 月 5 日、2012 年 9 月 5 日、2012 年 9 月 5 日、2012 年9 月 5 日、2012 年 9 月 5 日

日期中的元素是日、月和年。通常,顺序写为月-日-年或日-月-年。

要使排序在日期上起作用,这两项必须为真:

  1. 对于列中的每个日期,日期元素的顺序都是相同的。

  2. 至少一个非字母数字字符分隔日期元素。

特殊月份日期元素考虑。

如果使用月份名称而不是其编号,则必须至少使用前 3 个字母,并且必须是英文月份名称。月份名称不区分大小写。例如,“二月”、“二月”和“二月”。可以全部使用而不是月份 2。

(可以修改 JavaScript 以接受其他语言。编辑将在 GetDateSortingKey() 函数的 switch() 语句中。)

月份名称和月份编号可以在同一列可排序日期中使用。

特殊年份日期元素考虑。

如果使用一位数或两位数的年份,则假定年份以“20”开头以进行排序。例如,假设 12 年是 2012 年。并且假设第 3 年是 2003 年。

这是日期列排序链接href值(列号来自示例表):

href="javascript:SortTable(3,'D','mdy');"

为了对一列日期进行排序,JavaScript 函数 SortTable() 采用三个参数:

  1. 列号。

  2. 内容的类型。指定“D”对日期列进行排序。

  3. 日期元素的序列。对月-日-年使用“mdy”,对日-月-年使用“dmy”。对于其他序列,相应地排列字母“d”、“m”和“y”。

这是一个示例实现:

<th><a href="javascript:SortTable(3,'D','mdy');">Review Date</a></th>

当第一个可排序的列标题文本已被链接时,可以测试该实现。然后,链接任何其他列的标题文本以使其可排序。

表格排序

JavaScript 有一个地方可以自定义,table 标签的 id 值。每个可排序列的表头文本都链接到 JavaScript。

单击可排序列的标题文本时,表格的行将根据单击的列进行排序。第二次单击同一列会反转排序。

使用示例表的 HTML 代码作为实现您自己的表排序的指南。

使用 JavaScript 进行HTML表格排序相关推荐

  1. Javascript对HTML表格排序-很实用

    Javascript对HTML表格排序-很实用 Javascript实现HTML表格排序,点击表头的标题单元格,即可对该列排序,升序降序切换,数字.文本都可以排序. 先看下面的效果图: 该功能已经封装 ...

  2. HTML列表内容自动排序,JS实现HTML表格排序功能

    本文实例为大家分享了JavaScript实现HTML表格排序功能,供大家参考,具体内容如下 HTML代码: click me click me click me click me 15.43 700 ...

  3. php表格单元格怎么实现排序,javascript实现对表格元素进行排序操作

    我们在上网中都能看到很多能够排序的,如大小.时间.价格等 现在我们也试一下排序功能: 排序的函数代码:里面含有点击之后排序--还原,和排升序和降序. function sortAge(){ //对年龄 ...

  4. 表格排序tablesort小案列

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  5. 表格排序——tablesorter.js使用(支持中文排序)

    2019独角兽企业重金招聘Python工程师标准>>> 最近,因为项目需要,对表格排序做了一下摸索,整理如下: 1. 首先,可从官网下载tablesorter.js,但并不支持中文的 ...

  6. 【若依(ruoyi)】Bootstrap-Table表格排序

    前言 ruoyi 4.6 Bootstrap-Table表格排序 <script th:inline="javascript">...$(function() {var ...

  7. jQuery.tablesorter html表格排序插件

    使用jQuery tablesort实现html表格方法: 1. 下载jQuery和tablesort脚本,并在html中引用该脚本文件: <script type="text/jav ...

  8. jQuery html表格排序插件:tablesorter

    ablesort是一款很好用的jQuery表格排序插件. 支持多种数据类型排序,会自动识别表格内容数据类型,使用也非常方便. 使用jQuery tablesort实现html表格方法: 1. 下载jQ ...

  9. jQuery 表格排序插件 Tablesorter 使用

    jQuery 表格排序插件 Tablesorter 使用方式如下: 1.引入头文件(注意一定要把jQuery放在前面): <script src="lib/jquery-1.8.3.m ...

最新文章

  1. 1.8 centos7 的PATH、cp/mv/文档查看命令介绍
  2. 微信小程序新增推广功能,支持自定义关键词
  3. 让AMD在中国发声 APU14技术创新大会首次在华召开
  4. 云耀云服务器性能怎么样,华为云测评:2CPU+4G内存+5M带宽的云耀云服务器HECS
  5. Maven: maven parent.relativepath point at wrong local pom
  6. 欢迎进入徐松亮博客一站式导航搜索(随时更新)
  7. AE剪辑快捷键有哪些?这波快捷键分享拿好了
  8. C#支付宝扫码支付代码完整版(转)
  9. ThreadPoolExecutor(三)——Worker
  10. 视频去水印软件?在线去除视频水印工具网站?
  11. 深度学习21天实战caffe学习笔记《3 :准备Caffe环境》
  12. 动物计算:模型的建立与仿真
  13. 少数派实测报告:AI巨无霸模型GPT-3 | 附送API 调用方法「AI核心算法」
  14. 3、JVM JDK 和 JRE
  15. 全国地铁数据爬取-python
  16. linux snap 原理,snap,snap和Snappy指的是什么?
  17. 数组的创建和初始化(C语言)
  18. 想要绘图效率节省储存空间?CAD内部图块该怎么创建?
  19. Java学习苦旅(九)——原来顺序表可以这么简单呀
  20. Python 实现“人生重开模拟器“

热门文章

  1. 怎么python画好几朵玫瑰花_用Python画朵玫瑰,只要五分钟
  2. 家是文艺腔,更是烟火气
  3. 关键词搜索框的单击事件代码(jQuery)
  4. QQ音乐怎么引流?如何利用QQ音乐进行精准引流?
  5. C++ 一篇搞懂多态的实现原理
  6. 前后端项目如何实现完美的OSS文件上传
  7. 围城书评_软件开发指标的问答和书评
  8. 汽车电子产品热评估与散热措施
  9. Ewebeditor最新漏洞和漏洞指数
  10. css borderradius ie8,border-radius IE8兼容处理的方法