rows().every()
使用函数上下文设置为有问题的行的功能遍历每个选定的行。
描述
使用 DataTables 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();
相关
以下选项是直接相关的,并且在您的应用程序开发中可能也有用。