{hero}

选择器列

列的选择器选项。

说明

DataTables columns()column()(也可选择 cells()cell())方法可用于从表格中选择列。哪些列被选中以及选择器如何操作是由 column-selector 数据类型控制的。

选项

列选择器可以给定不同形式,以便轻松适用于你的数据和用例

  • 无选择器 - 选择所有列
  • integer - 列索引选择器
  • {integer}:visIdx - 列的可见索引选择器(例如 3:visIdx
  • {integer}:visible - {integer}:visIdx 的别名。请注意,从 2.1.4 开始,可以在 :visible 前面使用常规 DOM 选择器,以选择与给定选择器匹配的可见列。带前缀的数字是一个特例。
  • {string}:name - 列名称选择器,来自 columns.name(例如 salary:name
  • {string}:title - 列标题选择器 - 根据列的标题文本进行选择(例如 My\ Column:title
  • string - jQuery 选择器
  • node - 以下之一
    • th / td 列标题中的单元格
    • td / td 表格正文中的单元格 (自: 1.10.11)
    • 已分配 data-dt-column 特性的任何元素,或父级 (自: 1.10.11)。FixedColumns 和 Responsive 等扩展可使用此项进行简单的列选择。
  • function - 选择器函数 (自: 1.10.3)
  • jQuery - 列标题节点的 jQuery 对象
  • array - 包含以上任何选项组合的数组

无选择器

如果没有给定选择器(更具体地说,undefined),则会选择所有列。

获取表格中所有列的数据
var table = new DataTable('#myTable');
var allData = table.columns().data();

整数

DataTables 以列索引内部存储每列,以便快速查找列信息。当选择器给定为整数时,该值表示列数据索引(columns().indexes() / column().index())。

请注意,这是列数据索引,而不是可见索引数据索引是固定的,与列可见性无关,而可见索引会随着列可见性的更改而更改(请参阅下方,了解可见索引选择器)。

列数据索引 0 数据
var table = new DataTable('#myTable');
var data = table.column( 0 ).data();

{integer}:visible

列的可见索引是考虑已隐藏列之后的索引。当使用事件处理程序,并且隐藏某些列,或者最终用户可以隐藏某些列时,这将非常有用。这个选择器只是在上面integer类型中增加带有后缀字符串的 :visible(或 :visIdx)。例如:3:visIdx

获取被点击列的数据
var table = new DataTable('#myTable', {
    columnDefs: [
        { visible: false, targets: 1 }
    ]
} );

$('#example tbody').on( 'click', 'td', function () {
    var columnData = table
        .column( $(this).index()+':visIdx' )
        .data();
} );

自 DataTables 2.1.4 开始,此选项已扩展,支持在 “:visible” 前面使用常规 DOM 选择器,以便只选择可见的列。您也可以不包含选择器,以只选择可见的列

// Select columns that are visible and have a class of `important`
table.columns('.important:visible')

// Select all visible columns
table.columns(':visible')

{string}:name

DataTables 提供通过 columns.name 选项为列分配名称的功能,这给列提供人类可读的表示非常有用。:name 选择器提供根据分配的名称选择列的功能。

这个选择器只是带 :name 后缀的字符串(列名称)。例如,salary:name

请注意,分配的列名称不需要是唯一的(不过您通常希望它们是唯一的)。如果给出的选择器与来自同一名称的多列匹配,则会选择它们全部。

获取已命名列的数据
var table = new DataTable('#myTable', {
    columns: [
        { name: 'first-name' },
        { name: 'last-name' },
        { name: 'position' },
        { name: 'location' },
        { name: 'salary' }
    ]
} );

// Get salary column data
table.column( 'salary:name' ).data();

string

当选择器作为字符串给出时,它会被视为一个在表格中列标题的 thtd 元素上操作的 jQuery 选择器

每列只含一个用作列标题的单元格——如果表 thead 元素中每个列标题有多个可能的单元格,请参阅 orderCellsTop,了解 DataTables 如何选择用于列标题的单元格。

有关 jQuery 选择器可用选项的完整信息,请参阅 jQuery 选择器文档

请注意,就像 jQuery 选择器一样,当选择器以字符串提供时,可以使用逗号分隔符记法(即只用逗号分隔)提供多个选择器。

按 ID 选择单个列
var table = new DataTable('#myTable');
var column = table.column('#column-3');
按类名选择列
var table = new DataTable('#myTable');
var columns = table.columns('.priority');
按内容选择列
var table = new DataTable('#myTable');
var column = table.column(':contains(Salary)');

node

可以将thtd DOM 元素作为列选择器给出,以从该 DOM 元素的 DataTables API 中选择列(如上所述,此选择器适用于用于列标题的单元格,而不仅仅是标题中的所有单元格,如果有的话多行)。

当您只有用于引用的 DOM 节点(例如在事件处理程序中时),这对于从列获取数据,或执行其他基于列的操作非常有用。

获取被点击列的数据
var table = new DataTable('#myTable');

$('#example thead').on( 'click', 'th', function () {
  var columnData = table.column( this ).data();
  // ... do something with `columnData`
} );

Function

为了完全控制选择哪些列,可以通过提供带有您已定义逻辑的选择执行函数。该逻辑可以尽可能简单或复杂,只需返回 true 以将该列包含在所选结果中,否则返回 false 即可进行选择。

该函数接收三个参数

  1. 列索引 - 请参见 column().index()
  2. 列数据 - 请参见 column().data()。请注意,这是一组数据,每个单元格在所选列中有一条记录。这些数据是单元格的原始数据,如果您正在使用 columns.render,则不是呈现的数据
  3. 列节点 - 请参见 column().header()。请注意,这不是表格正文中的单元格。如果您需要该信息,请使用 column().nodes()

基于 selector-modifier 选项对可选择的每一列调用该函数一次,该选项还定义了用作调用函数的第二个参数的数据的顺序。

获取包含字符串 Active 的所有列的数据
var table = new DataTable('#myTable');

var active = table
    .columns( function ( idx, data, node ) {
        return $.inArray( 'Active', data ) !== -1 ?
            true : false;
    } )
    .data();

jQuery

与上述 node 类型非常类似(因为 jQuery 对象是 DOM 节点的类数组列表),可以将 jQuery 实例作为列选择器提供,该选择器与 jQuery 选择的节点和与表格中的表头单元格匹配。

请注意,在使用 jQuery 选择的一组列和隐藏的列时,jQuery 本身不会选择已隐藏的列标题单元格(因为当列隐藏时,DataTables 会将它们从文档中删除)。为了解决此问题,请使用上述 string 选项,该选项不存在此问题,并允许使用 jQuery 选择器。

从 jQuery 实例获取列数据
var columns = $('#example thead th.immediate');
var table = new DataTable('#myTable');

var columnData = table.columns( columns ).data();

数组

上述任何选项组合都可以作为选择器一起提供,通过提供一种选择多列或混合选择器类型的方法,只需在数组中提供您想要的选择器选项即可。

基于列索引获取两列的数据
var table = new DataTable('#myTable');
var data = table.columns( [0, 1] ).data();
混合 column-selector 类型 - 索引和类选择器
var table = new DataTable('#myTable');
var data = table.columns( [0, '.important'] ).data();