选择器列
列的选择器选项。
说明
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
当选择器作为字符串给出时,它会被视为一个在表格中列标题的 th
和 td
元素上操作的 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
可以将th
和td
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
即可进行选择。
该函数接收三个参数
- 列索引 - 请参见
column().index()
- 列数据 - 请参见
column().data()
。请注意,这是一组数据,每个单元格在所选列中有一条记录。这些数据是单元格的原始数据,如果您正在使用columns.render
,则不是呈现的数据 - 列节点 - 请参见
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();