API 集成
Select 为最终用户提供了一个界面,允许他们通过点击表格元素来选择项目。 这是最终用户真正需要了解的关于该软件的一切,但它只讲述了一半的故事! 你,作为程序员,需要知道何时选择了项目,并且需要能够检索这些项目来处理该选择!
这可以通过 DataTables API 来完成,Select 对其进行了扩展,使这些操作成为可能。
检索已选项目
DataTables 有三种主要方法可以从 DataTable 中获取项目(以及三种匹配的单个项目)
每种方法都有自己可以用来选择特定项目的选项,但它们都提供将 selector-modifier 选项传递进去的选项。 此选项用于告诉 API 如何排序和过滤可以从中选择的项目。 Select 通过在 selector-modifier 对象中添加 selected 选项来扩展此功能。 当为 true 时,它将返回选定的项目,当为 false 时,它将返回未选定的项目。 如果为 undefined,它将不执行任何操作。
例如,考虑以下内容
var table = $('#myTable').DataTable();
table.rows( { selected: true } ).data();
这将检索任何已选行的所有数据(使用 rows().data())。 如果需要,我们可以使用其他 selector-modifier 选项来扩展此功能
table
.rows( {
selected: true,
page: 'current'
} )
.nodes();
在这种情况下,将返回当前页上已选项目的行节点 (rows().nodes())。
当然,这可以与常规行选择器结合使用
table.rows( '.important', { selected: true } ).data();
将获取同时具有 important 类的任何已选行的所有数据。
类似地,我们可以对其他表格选择 API 方法执行类似的操作 - 例如
table.cells( { selected: true } ).data();
如果使用单元格选择选项,则获取已选的单元格。
在使用 API 和已选行时,值得注意的是 any() 和 count() 辅助方法对于了解是否选择以及选择了多少项目很有用。
项目选择
除了能够使用 DataTables API 检索已选项目之外,还可以使用 API 来选择和取消选择项目。 这是通过使用以下复数函数及其单数对应项来完成的
rows().select()/rows().deselect()columns().select()/columns().deselect()cells().select()/cells().deselect()
例如,要选择所有具有 important 类的行,请使用
table.rows( '.important' ).select();
这也可用于实现您自己的项目选择界面,如果您更愿意这样做,而不是使用 Select 提供的选项。 例如,考虑以下内容
$('#myTable').on( 'click', 'tbody tr', function () {
if ( table.row( this, { selected: true } ).any() ) {
table.row( this ).deselect();
}
else {
table.row( this ).select();
}
} );
此代码将切换表格中行的选择状态。 行逐行解释
- 第 1 行 - 将委托事件侦听器附加到表格中的行
- 第 2 行 - 检查行是否已选中
- 第 3 行 - 如果已选中,则取消选中它
- 第 6 行 - 如果未选中,则选中它
事件
谜题的最后一块是了解何时选择了项目。 这是通过 Select 发出的事件来完成的 - 具体来说是 select 和 deselect 事件。 这些事件可以使用标准的 DataTables 事件模型 来监听。
在使用 Select 时,使用 Buttons 扩展 用于 DataTables 也很自然 - 允许用户选择项目,然后单击按钮以对这些项目触发操作。
Select 提供了 selected 和 selectedSingle 按钮供 Buttons 使用,这些按钮可以用来在选择了项目时轻松地提供您自己的操作。 当没有选中项目时,这些按钮会自动停用(在 selectedSingle 的情况下,当选中了多个项目时也是如此),当选中项目时,这些按钮会激活。
例如,考虑以下内容,它使用 selected 按钮简单地告诉您选择了多少行
$('#myTable').DataTable( {
select: true,
buttons: [
{
extend: 'selected',
action: function ( e, dt, node, config ) {
var rows = dt.rows( { selected: true } ).count();
alert( 'There are '+rows+'(s) selected in the table' );
}
}
]
} );