rows().every()
迭代每個選定的列,並將函式上下文設定為該列。
說明
DataTable API 的一個典型操作是對列集合執行操作 - 對每個列執行常見的操作,例如新增事件處理常式、更新資料等等。在 DataTables 中,可以使用多種方式執行列的迭代,每種方式都有其優點
此 rows().every()
方法在大多數情況下可能最有用,因為它將回呼函式的上下文設定為相關列的 row()
實例(通常 DataTables API 中的回呼函式的上下文設定在最上層 API 階層)。簡單來說,這表示您可以使用 row().data()
等方法作為此方法的回呼函式中的 this.data()
。
考慮以下使用 each()
的範例,該範例會迭代已選取的列索引 - 我們需要取得每個列的 row()
物件,才能直接處理它
table.rows().eq(0).each( function ( index ) {
var row = table.row( index );
var data = row.data();
// ... do something with data(), or row.node(), etc
} );
使用 rows().every()
可以將其重寫為
table.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data();
// ... do something with data(), or this.node(), etc
} );
雖然在程式碼呈現方面是相對簡單的優化,但它可以使程式碼更具可讀性和直觀性。從 DataTables 2 開始,它的效能也顯著提高,因為 API 實例不需要在每次迴圈中建立。
另一個優點是會自動處理表格上下文 - 在上面的第一個範例中使用 each()
的情況下,會使用 eq()
方法僅從 API 上下文中的第一個表格中選取資訊,如果在多個表格的情況下使用會增加複雜度。在 rows().every()
中,表格上下文會自動設定為已選取之每一列的適當表格。
類型
function rows().every( fn )
- 說明
迭代每個選取的列
- 參數
名稱 類型 選用 1 fn
否 針對每個選取的列執行的函式。該函式的內容設定為該列的 API 實例。
從 DataTables 1.10.8 開始,該函式會傳遞以下參數
- 列索引
- 表格迴圈計數器
- 列迴圈計數器
不預期或不處理任何傳回值。
- 傳回
選取列的 DataTables API 實例。
範例
將子列新增至所有列,傳入 jQuery 建立的 tr
元素,並顯示所有子列
var table = new DataTable('#myTable');
table.rows().every(function (rowIdx, tableLoop, rowLoop) {
this.child(
$(
'<tr>' +
'<td>' +
rowIdx +
'.1</td>' +
'<td>' +
rowIdx +
'.2</td>' +
'<td>' +
rowIdx +
'.3</td>' +
'<td>' +
rowIdx +
'.4</td>' +
'</tr>'
)
).show();
});
更新表格中的所有列,僅在完成時重新繪製
var table = new DataTable('#myTable');
table.rows().every(function (rowIdx, tableLoop, rowLoop) {
var d = this.data();
d.counter++; // update data source for the row
this.invalidate(); // invalidate the data DataTables has cached for this row
});
// Draw once all updates are done
table.draw();
相關
以下選項直接相關,也可能在您的應用程式開發中有所幫助。