{hero}

行选择器

行的选择器选项。

描述

DataTables rows()row()(还需要 cells()cell())方法提供了从表格中选择行的功能。选择哪些行以及选择器实际如何操作是由此 row-selector 数据类型控制的。

选项

行选择器可以以多种不同的形式给出,以便于应用到您的数据和用例中

  • 无选择器 - 选择所有行
  • integer - 行索引选择器
  • string - ID 选择器
  • string - jQuery 选择器
  • node - 这可以是以下任意一项
    • tr - 表格行元素
    • td - 表格单元元素(自 1.10.11 起
    • 任何分配有 data-dt-row 属性或父元素(自 1.10.11 起)的元素。扩展程序(例如 FixedColumns 和 Responsive)可以使用此属性来方便行选择。
  • function - 函数选择器(自 1.10.3 起
  • jQuery - 行节点的 jQuery 对象
  • array - 包含上述任意组合选项的数组

无选择器

如果未提供选择器(更准确地说,为 undefined),则会选择所有行。

获取表中所有行的 data
var table = new DataTable('#myTable');
var allData = table.rows().data();

integer

DataTables 以行索引在内部存储每一行,以便快速查找行信息。当选择器为 integer 时,该值表示行索引(rows().indexes() / row().index())。

第 0 行的 data
var table = new DataTable('#myTable');
var data = table.row( 0 ).data();
通过行索引查找 data
var table = new DataTable('#myTable');

// Find indexes of rows which have `Yes` in the second column
var indexes = table.rows().eq( 0 ).filter( function (rowIdx) {
    return table.cell( rowIdx, 1 ).data() === 'Yes' ? true : false;
} );

// Add a class to those rows using an index selector
table.rows( indexes )
    .nodes()
    .to$()
    .addClass( 'highlight' );

string - #ID

DataTables 行选择器已针对 ID 进行了优化,因为希望通过唯一信息来选择行是一件很自然的事。这与 jQuery 选择器不同,因为 DataTables 可以优化这种选择器类型,以便不涉及 DOM - 也允许 ID 行选择器对尚未创建 DOM 节点的行进行操作(当使用 deferRender 以提高额外速度时)。

对于动态获取的数据,分配给行的 ID 是使用 rowId 选项进行标识的。用作 ID 的数据可以是任何值,尽管它在表中必须是唯一的。

若要使用 ID 选择器,只需给要选择的行的 ID 值加上数字符号:#。随后输入的值将作为 ID。与 jQuery 不同,该值不需要转义 - 尽管这意味着必须单独使用 ID 选择器(例如不能同时使用类名),但对于使用复杂数据来说,这确实使其更容易。

通过 ID 选择一行
var table = new DataTable('#myTable');
var row = table.row('#row-42');
通过 ID 选择多行
var table = new DataTable('#myTable');
var rows = table.rows( [ '#row-42', '#row-51' ] );

string

当选择器给定为一个字符串时,它将被视为在表中的 tr 元素上进行操作的 jQuery 选择器。有关 jQuery 选择器可用选项的完整信息,请参阅 jQuery 选择器文档

请注意,就像 jQuery 选择器一样,在将选择器提供为字符串时,可以使用逗号分隔符号(即用逗号分隔)提供多个选择器。

通过类名选择行
var table = new DataTable('#myTable');
var rows = table.rows('.priority');
通过两个类名选择器选择行
var table = new DataTable('#myTable');
var rows = table.rows('.important, .intermediate');

node

tr DOM 元素可作为行选择器提供,以从该 DOM 元素中选择 DataTables API 中的行。在您仅有可用于引用的 DOM 节点时(例如在事件处理程序中),这对于从行中获取数据或执行其他基于行的操作非常有用。

获取被点击的行的数据
var table = new DataTable('#myTable');

$('#example tbody').on( 'click', 'tr', function () {
  var rowData = table.row( this ).data();
  // ... do something with `rowData`
} );

函数

对于要选择哪一行具有完全控制权,可以提供一个包含用于执行选择操作的您已定义逻辑的函数。该逻辑可以像您所希望的那样简单或复杂,只需返回 true(如果应将行包含在所选结果中)和 false(IfNot)即可执行选择操作。

这对于基于行中包含的数据或基于节点的属性查找行尤其有用。

该函数接收三个参数

  1. 行索引 - 请参阅 row().index()
  2. 行数据 - 请参阅 row().data()。请注意,这是行的原始数据对象,如果不是使用 columns.render,则不是已呈现的数据
  3. 行节点 - 参见 row().node()。如果您正在使用 deferRender,请注意此节点可能为 null

此函数将根据 selector-modifier 选项(此选项还定义了调用函数的行顺序),针对可选择的每一行调用一次。

获取 first_nameA 开头的所有行的 data
var table = new DataTable('#myTable');

var names = table
    .rows( function ( idx, data, node ) {
        return data.first_name.charAt(0) === 'A' ?
            true : false;
    } )
    .data();

jQuery

与上述 node 类型非常相似(因为 jQuery 对象是 DOM 节点的一个类似数组的列表),所以可以将 jQuery 实例作为行选择器提供,并且匹配表中可用选项的由 jQuery 选中的所有节点都可以使用。

从 jQuery 实例中的行获取 data
var rows = $('tr.immediate');
var table = new DataTable('#myTable');

var rowData = table.rows( rows ).data();
使用 jQuery 选择器获取表格第五行中的数据
var rowData1 = table.rows( ':nth-child(5)' ).data();
var rowData2 = table.rows( ':eq(4)' ).data();

数组

以上选项的任意组合都可以用作选择器,提供一种方法来选择多行或混合选择器类型,只需在数组中提供所需的 selector 选项即可。

根据 id 获取两行的 data
var table = new DataTable('#myTable');
var data = table.rows( ['#row-42', '#row-91'] ).data();
混合 row-selector 类型 - id 和 class 选择器
var table = new DataTable('#myTable');
var data = table.rows( ['#row-42', '.important'] ).data();