2012-03-07 14 views
21

Sto utilizzando jquery dataTables per generare la tabella impaginata sul mio sito. Ho bisogno di eseguire un processo che afferra tutti i dati da una particolare colonna. Qualcosa di simile:Tabella Loop through DataTables per ottenere il contenuto di tutte le celle

$('.testLink').click(function(){ 
      var cells = new Array(); 
      $('#myTable tr td').each(function(){ 
       cells.push($(this).html()); 
      }); 
      console.log(cells); 
     }); 

Questo esempio prende tutto, ma mi avrebbe bisogno solo le informazioni da una colonna di TDS. Credo che potrei farlo aggiungendo una classe a tutti i tds in quella riga, ma sono sicuro che c'è un modo migliore. Questa è una domanda bonus ..

ma quello che voglio veramente sapere è come farlo funzionare con i datatables? Poiché lo script nasconde la maggior parte della tabella da inserire nella paginazione, questa funzione cattura solo le celle visibili. Ho giocato con fnGetData ma non lo capisco. Qualche idea?

+0

ciò che è oggettivo ... ottenere i dati delle righe non difficili da API e ci sono probabilmente gli esempi nel grande scarica pacchetto ... dettagli di post e tentativi di codice – charlietfl

+0

sì, ottenendo tutti i dati di riga in un array, quindi ho bisogno di usare quei dati per eseguire una query. Ho cercato e provato cose da API per ore ma non riesco a ottenerlo, quindi ho voluto dare un vortice. – Zac

risposta

45

Per accedere a tutte le righe, si può fare:

var rows = $("#myTable").dataTable().fnGetNodes(); 

Nel vostro caso, questo dovrebbe funzionare:

$('.testLink').click(function(){ 
     var cells = []; 
     var rows = $("#myTable").dataTable().fnGetNodes(); 
     for(var i=0;i<rows.length;i++) 
     { 
      // Get HTML of 3rd column (for example) 
      cells.push($(rows[i]).find("td:eq(2)").html()); 
     } 
     console.log(cells); 
    }); 
+1

Non vuole tutte le righe. Vuole una colonna specifica in ogni nodo. – Ohgodwhy

+4

@Ohgodwhy: va bene, eccolo ora. – Diego

+0

Sì! Grazie, questo è esattamente ciò di cui ho bisogno. – Zac

1

Ti consigliamo di utilizzare il selettore "EQ". Si inizia l'indice di "0", quindi se avete ..

<tr> 
    <td>0</td> 
    <td>1</td> 
    <td>2</td> 
    <td>3</td> 
</tr> 

Poi utilizzando

$("td").eq(3); // last one 
$("td").eq(2); //returns "2" 

senso?

http://api.jquery.com/eq-selector/

+6

che non funzionerà su una tabella impaginata, le righe non visibili non esistono – charlietfl

6

Ecco un metodo che utilizza fnGetData()

prima ottenere i dati dal plugin che saranno tutte le righe visibili o meno. Un ciclo su ogni array dati di riga, e spingere index = 1 (seconda cella) nella nuova matrice

 oTable = $('#example').dataTable(); 

     var secondCellArray=[]; 
     $.each(oTable.fnGetData(), function(i, row){ 
      secondCellArray.push(row[1]); 
    }) 

    console.log(secondCellArray) 

EDIT: lavora demo ... guardare in console dopo renda

http://live.datatables.net/apixiv/edit#javascript,html

4

jQuery.map combinati con fnGetData() fa per una soluzione compatta. La seguente funzione restituirà un array monodimensionale che contiene tutti i valori da n esima colonna obj_dtable s':?

function getDataTableColumn(obj_dtable,n) { 
    return $.map(obj_dtable.fnGetData(), function(val) { 
     return val[n]; 
    }); 
}; 
Problemi correlati