2015-09-16 30 views
12

Sto utilizzando DataTable 1.10.9 (da https://datatables.net). Colonne per DataTable vengono definiti in fase di inizializzazione in javascript e ogni colonna ha un nome univoco, ad esempio:Come ottenere il nome della colonna datatable?

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

so di poter ottenere la colonna dalla tabella con il nome che ho dato, ma io non riesco a trovare come trovare il nome di una colonna dall'oggetto colonna. (Spero che sia possibile con lo stato corrente del componente.) Ad esempio:

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

Qual è il corretto funzionamento o la proprietà per ottenere il nome lì?

risposta

27

è possibile recuperare le opzioni di inizializzazione attraverso table.settings().init() - e che la definizione columns in questo modo:

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

cliccando sul tasto verde una cella/<td> è possibile trovare l'indice della colonna per (migliore pratica in caso di colonne nascoste):

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

Un esempio di un gestore di clic che avvisa il corrispondente column.name quando una cellula viene fatto clic

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

tuo every() esempio potrebbe essere

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

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

+0

Accettare questo come parte di ogni() funzionerebbe per l'esempio che ho fornito nella domanda. –

+0

Non posso essere l'unico a trovare la loro API così indietro, giusto? – Mojimi

-1

Documentation mostra che columns().every() imposta this sull'oggetto column() della colonna corrente. Un ulteriore esame dell'oggetto colonna mostra che ha un metodo column().data() che restituisce i dati che la colonna contiene come una matrice di valori. Questo dovrebbe fornire i dati di cui hai bisogno.

0

Il seguente dovrebbe funzionare per voi come per il 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); 

}); 
+0

Quello probabilmente funzionerebbe, ma spero in una soluzione di accesso più centrata sul DataTable - il la classe che sta iterando attraverso le colonne ha solo riferimento agli oggetti DT, non avrebbe accesso alla matrice tableColumns. –

Problemi correlati