web-dev-qa-db-fra.com

Comment obtenir le nom de la colonne datatable?

J'utilise DataTable 1.10.9 (de https://datatables.net ). Les colonnes pour le datatable sont définies à l'étape d'initialisation en javascript et chaque colonne a un nom unique, par exemple: 

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

Je sais que je peux obtenir la colonne de la table par le nom que je lui ai donné, mais je n'arrive pas à trouver comment trouver le nom d'une colonne à partir de l'objet de colonne. (J'espère que c'est possible avec l'état actuel du composant.) Par exemple:

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

Quelle est la fonction ou la propriété appropriée pour obtenir le nom ici?

18
Anna T

Vous pouvez récupérer les options d'initialisation via table.settings().init() - et par là même la définition columns de cette façon:

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

Lorsque vous cliquez sur une cellule/<td>, vous pouvez trouver l'index de colonne par (meilleure pratique en cas de colonnes cachées):

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

Un exemple de gestionnaire de clic qui alerte le column.name correspondant quand une cellule est cliquée 

$("#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);
})

Votre exemple every() serait

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

démo -> http://jsfiddle.net/6fstLmb6/

43
davidkonrad

Ce qui suit devrait fonctionner pour vous selon le 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);

});
0
James Jithin