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()
中,表格上下文会自动设置为已选定每个列的相应表格。
类型
函数 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);
});
相关
以下选项与之直接相关,在您的应用程序开发中也可用得到。