如何获取数据表列的名称?
Posted
技术标签:
【中文标题】如何获取数据表列的名称?【英文标题】:How to get name of datatable column? 【发布时间】:2015-12-12 10:20:31 【问题描述】:我正在使用 DataTable 1.10.9(来自 https://datatables.net)。数据表的列是在 javascript 的初始化步骤中定义的,每列都有一个唯一的名称,例如:
var table = $('#example').DataTable(
columns: [
name: 'first-name' ,
name: 'last-name' ,
name: 'position' ,
name: 'location' ,
name: 'salary'
]
);
我知道我可以通过我给它的名称从表中获取列,但我似乎无法找到如何从列对象中找到列的名称。 (我希望组件的当前状态是可能的。)例如:
table.columns().every(function()
//I'd want to see what the name of this column is, something like:
console.log(this.name()); //will throw an exception since no such function exists
//or
console.log(this.name); //will output 'undefined'
);
获取名称的正确函数或属性是什么?
【问题讨论】:
【参考方案1】:您可以通过 table.settings().init()
检索初始化选项 - 并且通过这种方式 columns
定义:
var columns = table.settings().init().columns;
单击单元格/<td>
时,您可以通过以下方式找到列索引(隐藏列的最佳做法):
var colIndex = table.cell(this).index().column;
单击处理程序的示例,当单击单元格时提醒相应的column.name
$("#example").on('click', 'td', function()
//get the initialization options
var columns = table.settings().init().columns;
//get the index of the clicked cell
var colIndex = table.cell(this).index().column;
alert('you clicked on the column with the name '+columns[colIndex].name);
)
您的 every()
示例将是
var columns = table.settings().init().columns;
table.columns().every(function(index)
console.log(columns[index].name);
)
演示 -> http://jsfiddle.net/6fstLmb6/
【讨论】:
接受这个作为 every() 的一部分将适用于我在问题中给出的示例。 我不会是唯一一个发现他们的 api 如此落后的人吧? 我需要table.settings().init().columnDefs
而不是table.settings().init().columns
您现在可以获得colIndex
,如下所示:var colIndex = table.column(this).index();
谢谢您的休息。
有没有“init”的解决方案?这会导致固定列出现问题【参考方案2】:
下面的代码对我有用
this.api().columns().every(function()
console.log( this.header().textContent )
)
您也可以为特定的列名添加特定的 html 类,例如拥有该类
this.api().columns(".myColumnClass").every(function()
console.log( this.header().textContent )
)
【讨论】:
【参考方案3】:根据API document,以下内容应该适合您:
var tableColumns = [
name: 'first-name'
,
name: 'last-name'
,
name: 'position'
,
name: 'location'
,
name: 'salary'
]
var table = $('#example').DataTable(
tableColumns
);
table.columns().every(function (index)
console.log(tableColumns[index].name);
);
【讨论】:
这可能行得通,但我希望有一个更以 DataTable 为中心的访问解决方案 - 遍历列的类只有 DT 对象引用,它无法访问 tableColumns数组。【参考方案4】:您可以尝试使用另一种方法。 “index”变量是你头的一列。此方法将获取表格的 thead 列并读取标签内的文本。
dataTable.column(index).header().textContent
【讨论】:
文本内容与名称不匹配。【参考方案5】:Documentation 表明columns().every()
将this
设置为当前列的column()
对象。对列对象的进一步检查表明它有一个column().data()
方法,该方法将列包含的数据作为值数组返回。这应该提供您需要的数据。
【讨论】:
操作要求提供列名,而不是数据 :)以上是关于如何获取数据表列的名称?的主要内容,如果未能解决你的问题,请参考以下文章