行选择器
行的选择器选项。
描述
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)即可执行选择操作。
这对于基于行中包含的数据或基于节点的属性查找行尤其有用。
该函数接收三个参数
- 行索引 - 请参阅
row().index()
- 行数据 - 请参阅
row().data()
。请注意,这是行的原始数据对象,如果不是使用columns.render
,则不是已呈现的数据 - 行节点 - 参见
row().node()
。如果您正在使用deferRender
,请注意此节点可能为null
。
此函数将根据 selector-modifier
选项(此选项还定义了调用函数的行顺序),针对可选择的每一行调用一次。
获取 first_name
以 A
开头的所有行的 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();