{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),則會選取所有列。

取得表格中所有列的資料
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 來執行選取。

這對於根據列中包含的資料或基於節點的屬性查找列特別有用。

該函式接收三個參數

  1. 列索引 - 請參閱 row().index()
  2. 列資料 - 請參閱 row().data()。請注意,這是列的原始資料物件,而不是如果您正在使用 columns.render 的呈現資料
  3. 列節點 - 請參閱 row().node()。請注意,如果您正在使用 deferRender,則可能為 null

對於可以選取的每個列,都會呼叫該函式一次,這基於 selector-modifier 選項,該選項還定義了呼叫函式的列順序。

取得所有 first_nameA 開頭的列的資料
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();