{hero}

DataTables.Type

DataTables 数据类型对象。

描述

DataTables 数据类型对象包含有关它如何处理不同数据类型的的信息。

使用 Typescript 定义,该对象具有以下结构

interface DataTable.Type {
    className?: string;
    detect: (data: any) => (boolean | null) | {
        oneOf: (data: any) => boolean,
        allOf: (data: any) => boolean,
        init: (settings: Object, column: Object, index: number) => boolean
    };
    order: {
        pre?: (data: any) => any;
        asc?: (a: any, b: any) => number;
        desc?: (a: any, b: any) => number;
    };
    render?: (data: any, type: string, row: any) => string | number | Node;
    search?: (data: any) => string;
}

属性

数据类型对象可以使用以下属性

className

类名属性用于自动为与该数据类型匹配的列分配一个类。这可能用于样式更改或排版。例如,内置的 num 数据类型使用 dt-right 作为类名,将数字数据对齐到右侧。

detect

这是 DataTables 如何确定数据类型。从 DataTables 2.1 开始,它可以采用两种形式,一个包含多个参数的对象,允许对类型检测进行细化,或者一个单一函数。

我们先讨论单个函数(DataTables 2.0+) - 该函数将检查传入的数据以确定它是否与预期的数据类型匹配,如果是,则返回 true。如果数据与预期格式不匹配,则返回 false。几乎任何数据类型都可以传递到此函数中,因此必须小心 - 不能仅仅假设它将是一个字符串。

例如,考虑以下内容以检测 IPv4 地址

function (data) {
    return typeof data === 'string' && data.match(/^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$/))
        ? 'ipv4'
        : null;
}

从 DataTables 2.1 开始,也可以使用包含 oneOfallOfinit 函数的对象

  • allOf - 这与上面的函数相同。列中的所有数据点都必须通过此函数才能使列采用此数据类型。
  • oneOf - 列中的至少一个数据点必须通过此函数才能使列采用此数据类型。
  • init - 在类型检测开始时运行,以查看是否可以根据列的属性(而不是数据)将数据类型分配给列。

order

DataTables 中的排序通过为类型定义的 preascdesc 函数完成

  • pre - 预格式化方法。用于将格式化的数据转换为可排序的数据
  • asc - 升序排序方法
  • desc - 降序排序方法

这些函数中的每一个都是可选的,您可以使用以下组合之一

  • pre - 排序将使用 DataTables 默认排序对返回的数据进行排序。
  • ascdesc - 标准 Javascript 排序函数
  • 所有三个 - 预格式化的数据将传递到自定义排序方法中。

强烈建议您提供 pre 方法,如果您需要将数据从原始数据类型转换为排序方法将使用的类型。这是因为 pre 函数在排序时每个数据点只运行一次,而 ascdesc 排序方法可能每个数据点被调用多次。

例如,考虑以下排序数据类型定义,它用于对没有 the 前缀的数据进行排序(通常用于书籍和电影)。这里我们只需要使用 pre 预格式化器(大多数排序定义都是这样)。

function (data) {
    return data.replace(/^ the/i, '');
}

render

渲染函数可用于将数据转换为不同形式以用于不同的正交操作,但它专门用于显示格式化。如果尚未为列提供渲染函数,则此处定义的函数将自动应用于数据类型(columns.render)。

当您事先不知道传入数据的类型并且想要根据最终用户的本地化首选项对其进行格式化时,这尤其有用。例如,日期在美国应该是 M/D/Y 格式,而在世界其他大多数地方应该是 D/M/Y 格式。

以下两个命令将内置渲染器分配给 datenum(数字)数据类型,以便在确定列匹配该类型时自动渲染。它们将自动以本地化的方式为最终用户格式化数据

DataTable.type('date', 'render', DataTable.render.date());
DataTable.type('num', 'render', DataTable.render.number());

search

搜索函数用于将输入数据转换为字符串,该字符串将在 DataTables 为最终用户执行任何搜索时与之匹配。这样它非常类似于 pre 排序预格式化器,因为它预处理数据。

这是因为可以用来去除不应搜索的数据,例如 HTML 标签,或者它可以用来在搜索术语中提供冗余,例如用户可能会搜索带有空格或不带空格的显示电话号码。以下示例演示了这一点

function (data) {
    // Return original data and also remove any non-numeric data, so
    // '555-2368' would be returned as '555-2368 5552368' allowing
    // either form to be searched for
    return data + ' ' + data.replace(/[^\d]/g, '');
}

更多信息

使用以下资源进一步探索 DataTables 数据类型