{hero}

rows().every()

自:DataTables 1.10.6 起

使用函数上下文设置为有问题的行的功能遍历每个选定的行。

描述

使用 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 )

描述

迭代每个选定的行

参数
返回

选中行的 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();

相关

以下选项是直接相关的,并且在您的应用程序开发中可能也有用。