{hero}

columns().every()

起于:DataTables 1.10.6

遍历每个选定列,其中函数上下文的设置需为相关列。

描述

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() 中,表格上下文会自动设置为已选定每个列的相应表格。

类型

函数 columns().every( fn )

描述

遍历每个选定的列

参数
返回

选定列的 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);
});

相关

以下选项与之直接相关,在您的应用程序开发中也可用得到。