列選取器
用於列的選取器選項。
說明
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
),則會選取所有列。
取得表格中所有列的資料
var table = new DataTable('#myTable');
var allData = table.rows().data();
integer
DataTables 在內部使用列索引來儲存每一列,以便快速查找列資訊。當選取器以整數形式給定時,此值表示列索引 (rows().indexes()
/ row().index()
)。
列索引 0 的資料
var table = new DataTable('#myTable');
var data = table.row( 0 ).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
以提高速度時)。
對於動態來源的資料,使用 rowId
選項指定指派給列的 id。用作 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 元素中選取 DataTabels 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
來執行選取。
這對於根據列中包含的資料或基於節點的屬性查找列特別有用。
該函式接收三個參數
- 列索引 - 請參閱
row().index()
- 列資料 - 請參閱
row().data()
。請注意,這是列的原始資料物件,而不是如果您正在使用columns.render
的呈現資料 - 列節點 - 請參閱
row().node()
。請注意,如果您正在使用deferRender
,則可能為null
。
對於可以選取的每個列,都會呼叫該函式一次,這基於 selector-modifier
選項,該選項還定義了呼叫函式的列順序。
取得所有 first_name
以 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
與上述 node
類型非常相似(因為 jQuery 物件是 DOM 節點的類陣列清單),可以將 jQuery 實例作為列選取器給定,選取由 jQuery 選取且與表格中可用的節點匹配的任何節點。
從 jQuery 實例中的列取得資料
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();
array
可以將上述選項的任意組合作為選取器一起給定,從而提供一種選取多列或混合選取器類型的方法,只需在陣列中提供所需的選取器選項即可。
取得基於 id 的兩列的資料
var table = new DataTable('#myTable');
var data = table.rows( ['#row-42', '#row-91'] ).data();
混合 row-selector
類型 - id 和類別選取器
var table = new DataTable('#myTable');
var data = table.rows( ['#row-42', '.important'] ).data();