columns().every()
迭代選取的每個欄位,並將函式內容設定為所討論的欄位。
描述
DataTable API 的典型操作是在欄位集合上執行操作 - 在每個欄位上執行通用操作,例如新增事件處理常式、更新資料等。這種欄位的迭代可以在 DataTables 中以多種方式執行,每種方式都有其自身的優勢
這個 columns().every()
方法在大多數情況下可能最有用,因為它將回呼函式的內容設定為所討論欄位的 column()
實例(通常 DataTables API 中的回呼的內容會設定為最上層的 API 層級)。簡單來說,這表示您可以使用像 column().data()
這樣的方法,在傳遞給此方法的回呼中,使用 this.data()
的方式來使用。
考慮以下使用 each()
的範例,它迭代已選取的欄位索引 - 我們需要取得每個欄位的 column()
物件,以便直接操作它
table.columns().eq(0).each( function ( index ) {
var column = table.column( index );
var data = column.data();
// ... do something with data(), or column.nodes(), etc
} );
使用 columns().every()
,這可以改寫成
table.columns().every( function () {
var data = this.data();
// ... do something with data(), or this.nodes(), etc
} );
雖然在程式碼呈現方面是一個相對簡單的優化,但它可以使程式碼更易讀且更直觀。自 DataTables 2 起,它也具有顯著更高的效能,因為 API 實例不需要在每次迴圈時都建立。
另一個優點是表單內容會自動處理 - 在上面的第一個範例中,使用了 each()
,eq()
方法僅用於從 API 內容中的第一個表格中選取資訊,如果使用多個表格,則會引入複雜性。在 columns().every()
中,表單內容會針對已選取的每個欄位自動設定為適當的表格。
類型
function columns().every( fn )
- 描述
迭代選取的每個欄位
- 參數
名稱 類型 選用 1 fn
否 為每個選取的欄位執行的函式。函式的內容設定為所討論欄位的 API 實例。
從 DataTables 1.10.8 起,該函式會傳遞以下參數
- 欄位索引
- 表格迴圈計數器
- 欄位迴圈計數器
不預期或處理任何回傳值。
- 回傳
選取欄位的 DataTables API 實例。
範例
為表格中的每個欄位新增篩選器到頁尾
var table = new DataTable('#myTable');
table.columns().every(function () {
var that = this;
$('input', this.footer()).on('keyup change', function () {
that.search(this.value).draw();
});
});
為每個具有 select-filter
類別的欄位建立搜尋。
var table = new DataTable('#myTable');
table.columns('.select-filter').every(function () {
var that = this;
// Create the select list and search operation
var select = $('<select />')
.appendTo(this.footer())
.on('change', function () {
that.search($(this).val()).draw();
});
// Get the search data for the first column and add to the select list
this.cache('search')
.sort()
.unique()
.each(function (d) {
select.append($('<option value="' + d + '">' + d + '</option>'));
});
});
加總所有具有 .sum
類別的欄位,並將總和放入其頁尾儲存格中
var table = new DataTable('#myTable');
table.columns('.sum').every(function () {
var sum = this.data().reduce(function (a, b) {
return a + b;
});
$(el).html('Sum: ' + sum);
});
相關
以下選項直接相關,並且在您的應用程式開發中可能也很有用。