排序插件
DataTables 提供了两个 API 用于对表格中的信息进行排序
- 基于类型的排序
- 自定义数据源排序
在这两种类型中迄今为止最常用的是“基于类型的排序”,如果您刚开始使用 DataTables,那么您最有可能想要使用这种排序。
基于类型的排序
主要的 DataTables 包含针对字符串、日期、数字和货币数据执行排序的函数,但您很可能希望按照某种其他方式对数据执行排序,例如内置的数据格式。以下排序函数提供了多种可与 DataTables 一起使用的不同排序方法。
还值得注意的是,排序函数与类型检测插件紧密配合,并且以下许多排序插件都具有对应的类型检测函数,可非常轻松地进行安装,我们强烈建议采用此方法。
如何使用
要添加通过以下插件函数对特定数据类型执行排序的能力,您需要将该插件的代码包含在可用于您页面的 JavaScript 中 - 然后,如果您使用合适的类型检测插件,新的排序将自动应用,如果您没有可用的类型检测插件,可能需要针对目标列使用columns.type
参数。
浏览器
直接在浏览器中加载排序插件仅仅是加载插件的 JavaScript(在您加载主要的 DataTables JavaScript 之后)。例如,以下代码使用已保存到文件中的anti-the
插件
<script type="text/javascript" src="jquery.dataTables.js"></script>
<script type="text/javascript" src="dataTables.antiThe.js"></script>
<script type="text/javascript">
var table = new DataTable('#myTable', {
columnDefs: [
{
target: 0,
type: 'anti-the',
},
],
});
</script>
可以在我们的 CDN 上获得可以包含在浏览器中的插件。请参阅每个插件的详细信息页面,了解完整的 CDN URL。
ES 模块
排序插件还可作为 ES 模块使用,可以从datatables.net-plugins
程序包(.mjs
文件)中加载。您需要包含插件所需的文件。以下再次使用anti-the
的示例
import DataTable from 'datatables.net';
import 'datatables.net-plugins/sorting/anti-the.mjs';
var table = new DataTable('#myTable', {
columnDefs: [
{
target: 0,
type: 'anti-the',
},
],
});
CommonJS
如果您正在使用CommonJS(即在 Node 或 Webpack 的旧版本中),则可以加载.js
文件,它将自动将插件添加到 DataTables。与 DataTables 内核和扩展一样,CommonJS 加载程序提供了一个函数,您需要使用 window
和 $
/jQuery
对象调用该函数 - 例如
var $ = require('jquery');
var DataTable = require('datatables.net')(window, $);
require('datatables.net-plugins/sorting/anti-the.js')(window, $);
插件
区分大小写 | 根据数据的字母大小写进行排序,按照升序排列,大写字母优先于小写字母。 |
absolute | 对数据执行排序时,将一项或多项保持在表格的顶部和/或底部 |
alt-string | 将图像标记的`alt`属性用作排序依据。 |
anti-the | 去掉前缀词 `dt-string The`(如果存在),然后排序 |
any-number | 按数字对包含混合数字内容的列排序 |
brackets-negative | 检测带前导货币符号的货币类型数据,以及检测两种负数字格式 |
chapter | 按照数字对书籍章节进行排序 |
chinese-string | 对中文数字进行排序 |
currency | 当数据带有前导货币符号时,按照数字对数据进行排序。 |
czech-string | 对捷克语进行区域感知排序。 |
date-dd-MMM-yyyy | 对 `dd-mmm-yyyy` 格式的日期进行排序 |
date-de | 对格式为 `dd.mm.YYYY HH:mm` 或 `dd.mm.YYYY` 的日期/时间进行排序。 |
date-eu | 对 `dd/mm/YY[YY]` 格式的日期进行排序(带可选空格) |
date-euro | 对格式为 `dd/mm/YYYY hh:ii:ss` 的日期/时间进行排序 |
date-uk | 对 `dd/mm/YY` 格式的日期进行排序 |
datetime-luxon | 使用 luxon 对任何格式的日期和时间进行排序 |
datetime-moment | 使用 Moment.js 对任何格式的日期和时间进行排序 |
diacritics-sort | 更好地对包含重音字符(变音符号)的字符串进行排序 |
enum | 为 DataTable 动态创建枚举排序选项 |
farsi-numbers | 对包含 UTF8 Farsi 数字的列进行排序 |
file-size | 正确排序缩写的文件大小(8MB、4KB 等) |
formatted-numbers | 对以千位分隔符显示的数字进行排序 |
intl | 使用 Intl Javascript API 对字符串数据进行排序 |
ip-address | 按数字对 IP 地址进行排序 |
monthYear | 此排序插件将按日历顺序对处于 "MM YY" 格式的数据进行排序。请注意,此插件已被**弃用*。[datetime](//datatables.net.cn/blog/2014-12-18) 插件提供了增强功能和灵活性。 |
natural-time-delta | 对人类可读的时间增量进行排序 |
natural | 以_自然方式_对包含数字和字母的混合数据进行排序。 |
nepali-numbers | 对包含 UTF8 nepali 数字的列进行排序 |
novalue | 将任何 "novalue" 模式作为最大值或最小值进行排序(例如,'-' 视为 -1000 或 1000)。 |
num-html | 对 HTML 与数字数据混合的数据进行排序。 |
numString | 对正则表达式中任意位置包含的数字值进行排序。 |
numeric-comma | 正确排序使用逗号作为小数点数字。 |
percent | 对带后缀百分比符号的数字数据进行排序 |
persian-number | 对包含 UTF-8 Persian 数字的列进行排序 |
persian | 按字母顺序对 Persian 字符串进行排序 |
scientific | 对以指数表示法写的数据进行排序。 |
signed-num | 按数字对带有前导 `+` 符号(以及 `-`)的数据进行排序。 |
stringMonthYear | 此排序插件将按日历顺序对处于 "MMM yyyy" 或 "MMMM yyyy" 格式的数据进行排序。灵感来自论坛讨论:https://datatables.net.cn/forums/discussion/1242/sorting-dates-with-only-month-and-year 请注意,此插件已被**弃用*。[datetime](//datatables.net.cn/blog/2014-12-18) 插件提供了增强功能和灵活性。 |
time-elapsed-dhms | 正确排序缩写的时间跨度(2 天 3 小时、2 小时 8 分钟、3 分钟 8 秒、30 秒等) |
time | 对以下格式的时间进行排序:`hh:mm、hh:mm:ss、hh:mm tt、hh:mm:ss tt` |
title-numeric | 根据空元素上的属性按数字对数据进行排序。 |
title-string | 基于空元素的属性,将数据按字符串进行排序。 |
turkish-string | 对土耳其语字符进行排序 |
自定义数据源排序
自定义数据源排序插件允许完全控制要排序的数据。通常,这用于在对表进行排序之前从 DOM 中实时检索数据,以对可由最终用户或其他某个脚本更新的数据进行排序。
您还可以将基于类型的排序与自定义数据源排序结合起来,因为自定义数据源排序插件返回的数据的处理方式与自动检索的数据完全相同。
请注意,自定义数据源排序插件通常会查询 DOM 以获取信息,这可能会降低性能。因此,如果您能够使用基于类型的排序 (参见上文) 或正交数据,建议您这样做。
如何使用
要使用以下自定义数据源排序插件,您只需在加载 DataTables 库后,但初始化 DataTable 之前,将插件的代码包含在页面可用的 JavaScript 中。您还需要为该列指定columns.orderDataType
参数,以告诉它要使用哪个插件函数。
以下示例显示了多个自定义数据源插件的用法,以及它与columns.type
结合使用的情况 (实时示例)
<script type="text/javascript" src="jquery.dataTables.js"></script>
<script type="text/javascript" src="dataTables.dataSourcePlugins.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#example').dataTable( {
"columns": [
null,
null,
{ "orderDataType": "dom-text" },
{ "orderDataType": "dom-text", "type": "numeric" },
{ "orderDataType": "dom-select" },
{ "orderDataType": "dom-checkbox" }
]
} );
} );
</script>
插件
自定义数据源函数用于更新 DataTables 中的缓存数据,以便可以对带有用户输入信息的列进行排序。
dom-checkbox | 基于列中复选框的选中状态进行排序 |
dom-select | 基于列中 `dt-tag select` 选项的值进行排序 |
dom-text-numeric | 基于列中 `dt-tag input` 元素的值进行排序。 |
dom-text | 基于列中 `dt-tag input` 元素的值进行排序。 |