简体   繁体   English

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

[英]How to get name of datatable column?

I'm using DataTable 1.10.9 (from https://datatables.net ).我正在使用 DataTable 1.10.9(来自https://datatables.net )。 Columns for the datatable are defined at the initialization step in javascript and each column has a unique name, eg:数据表的列是在 javascript 初始化步骤中定义的,每列都有一个唯一的名称,例如:

var table = $('#example').DataTable({
            columns: [
                { name: 'first-name' },
                { name: 'last-name' },
                { name: 'position' },
                { name: 'location' },
                { name: 'salary' }
            ]
        });

I know I can get the column from the table by the name I've given it, but I can't seem to find how to find a column's name from the column object.我知道我可以通过给定的名称从表中获取列,但我似乎无法找到如何从列对象中找到列的名称。 (I'm hoping it's possible with the current state of the component.) For example: (我希望组件的当前状态是可能的。)例如:

        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'
        });

What's the proper function or property to get the name there?在那里获得名称的正确功能或属性是什么?

You can retrieve the initialization options through table.settings().init() - and by that the columns definition this way :您可以通过table.settings().init()检索初始化选项 - 通过这种方式定义columns

var columns = table.settings().init().columns;

When clicking on a cell / <td> you can find the column index by (best practice in case of hidden columns) :单击单元格 / <td>您可以通过以下方式找到列索引(隐藏列的最佳做法):

var colIndex = table.cell(this).index().column;

An example of a click handler that alerts the corresponding column.name when a cell is clicked单击单元格时提醒相应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);
})

Your every() example would be你的every()例子是

var columns = table.settings().init().columns;
table.columns().every(function(index) { 
    console.log(columns[index].name);
})  

demo -> http://jsfiddle.net/6fstLmb6/演示 -> http://jsfiddle.net/6fstLmb6/

The following should work for you as per the API document :根据API 文档,以下内容应该对您有用

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);

});

You can try using this another method.您可以尝试使用另一种方法。 " index " variable is a column of your thead . 指数”变量是你的THEAD列。 This method will get the thead column of your table and read the text inside tag.此方法将获取表格的 thead 列并读取标签内的文本。

dataTable.column(index).header().textContent

below code worked for me下面的代码对我有用

this.api().columns().every(function() {
  console.log( this.header().textContent )
})

also you can add a specific html class for only specific column names like having that class您也可以为特定的列名称添加特定的 html 类,例如拥有该类

this.api().columns(".myColumnClass").every(function() {
  console.log( this.header().textContent )
})

Documentation shows that columns().every() sets this to the current column's column() object.文档显示columns().every() this设置为当前列的column()对象。 Further examination of the column object shows that it has a column().data() method which returns the data the column contains as an array of values.对列对象的进一步检查表明它有一个column().data()方法,该方法将列包含的数据作为值数组返回。 This should provide the data you need.这应该提供您需要的数据。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM