row-selector
Selector options for rows.
Description
The DataTables rows()
and row()
(also optionally cells()
and cell()
) methods provide the ability to select rows from the table. What rows are selected and how the selector actually operates is controlled by this row-selector
data type.
Options
The row selector can be given in a number of different forms, to make it easy to apply to your data and use case:
- No selector - Select all rows
integer
- Row index selectorstring
- ID selectorstring
- jQuery selectornode
- This may be one of the following:tr
- table row elementtd
- table cell element (Since: 1.10.11)- Any element which has a
data-dt-row
attribute assigned to it, or a parent (Since: 1.10.11). This can be used by extensions such as FixedColumns and Responsive to allow easy row selection.
function
- Function selector (Since: 1.10.3)jQuery
- jQuery object of row nodesarray
- Array containing any combination of the above options
No selector
If no selector is given (more specifically undefined
), then all rows are selected.
Get data for all rows in the table:
var table = new DataTable('#myTable');
var allData = table.rows().data();
integer
DataTables stores each row internally with a row index for fast look up of row information. When the selector is given as an integer, this value represents a row index (rows().indexes()
/ row().index()
).
Row index 0 data:
var table = new DataTable('#myTable');
var data = table.row( 0 ).data();
Find data using row indexes:
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 row selector is optimised for IDs as it is natural to wish to select rows by unique information. This is distinct from a jQuery selector as DataTables can optimise this selector type so as to not involve the DOM - also allowing an id row selector to operate on rows which have not yet had their DOM nodes created (when using deferRender
for extra speed).
With dynamically sourced data, the id assigned to the row is identifier using the rowId
option. The data used as the id can be of any value, although it must be unique in the table.
To use an id selector, simply prefix the id value for the row you wish to select with a number sign: #
. The value that follows is taken as the id. Unlike jQuery this value does not need to be escaped - although this means that an id selector must be used alone (e.g. a class name cannot also be used), it does make is much easier to use for complex data.
Select a single row by id:
var table = new DataTable('#myTable');
var row = table.row('#row-42');
Select multiple rows by id:
var table = new DataTable('#myTable');
var rows = table.rows( [ '#row-42', '#row-51' ] );
string
When the selector is given as a string, it is treated as a jQuery selector that operates on the tr
elements in the table. For full information about the options available for jQuery selectors, please refer to the jQuery selector documentation.
Note that just like jQuery selector, is it possible to supply multiple selectors using comma separated notation (i.e. just separate by a comma) when the selector is provided as a string.
Select rows by class name:
var table = new DataTable('#myTable');
var rows = table.rows('.priority');
Select rows by two class name selectors:
var table = new DataTable('#myTable');
var rows = table.rows('.important, .intermediate');
node
tr
DOM elements can be given as a row selector to select a row in the DataTabels API from that DOM element. This can be useful for getting data from a row, or performing other row based operations, when you have only the DOM node for reference, for example in an event handler.
Get the data for a row that was clicked upon:
var table = new DataTable('#myTable');
$('#example tbody').on( 'click', 'tr', function () {
var rowData = table.row( this ).data();
// ... do something with `rowData`
} );
Function
For complete control over which rows are selected, it is possible to provide a function with logic you've defined to perform the selection. That logic can be as simple or as complex as you wish, performing the selection by simply returning true
if the row should be included in the selected results and false
if not.
That can be particularly useful for finding rows based on the data contained in the rows, or based on properties of the nodes.
The function receives three parameters:
- Row index - see
row().index()
- Row data - see
row().data()
. Note that this is the original data object for the row, not the rendered data if you are usingcolumns.render
- Row node - see
row().node()
. Note that this may benull
if you are usingdeferRender
.
The function is called once for every row that can be selected, based on the selector-modifier
options, which also defines the order of the rows for the called function.
Get the data for all rows that have a first_name
starting with A
:
var table = new DataTable('#myTable');
var names = table
.rows( function ( idx, data, node ) {
return data.first_name.charAt(0) === 'A' ?
true : false;
} )
.data();
jQuery
Very similar to the above node
type (since a jQuery object is an array-like list of DOM nodes), a jQuery instance can be given as a row selector, with any nodes which are selected by jQuery and match those available in the table selected.
Get data from rows in a jQuery instance:
var rows = $('tr.immediate');
var table = new DataTable('#myTable');
var rowData = table.rows( rows ).data();
Use jQuery selectors to get the data in the fifth row of the table:
var rowData1 = table.rows( ':nth-child(5)' ).data();
var rowData2 = table.rows( ':eq(4)' ).data();
array
Any combination of the above options can be given as selector together, providing a method to select multiple rows, or to mix selector types, by simply providing the selector options you want in an array.
Get the data for two rows, based on id:
var table = new DataTable('#myTable');
var data = table.rows( ['#row-42', '#row-91'] ).data();
Mix row-selector
types - id and class selector
var table = new DataTable('#myTable');
var data = table.rows( ['#row-42', '.important'] ).data();