如何获取数据表列的名称?

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() 方法,该方法将列包含的数据作为值数组返回。这应该提供您需要的数据。

【讨论】:

操作要求提供列名,而不是数据 :)

以上是关于如何获取数据表列的名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用普通 JDBC 获取目标表的名称和外键列的列

执行sklearn Column Transformer后如何获取新列的名称

如何获取最后插入的ID,以及PDO列的名称?

添加行时如何获取表列的值

labview如何获取簇数组中的数据名称、类型和数据值

如何更改JTable中列的名称