Как получить имя столбца данных?

Я использую DataTable 1.10.9 (от https://datatables.net). Столбцы для данных datatable определены на этапе инициализации в 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);
})  

demo → http://jsfiddle.net/6fstLmb6/

Ответ 2

Следующее должно работать для вас в соответствии с 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);

});

Ответ 3

Документация показывает, что columns().every() устанавливает this в текущий столбец column() объект. Дальнейшая проверка объекта столбца показывает, что он имеет метод column().data(), который возвращает данные, которые столбец содержит в виде массива значений. Это должно предоставить нужные вам данные.