2013-02-12 15 views
7

Sto usando Datatables per visualizzare alcuni dati. Ho anche input che vengono utilizzati per aggiungere una nuova riga ai dati. Quando aggiungo questa riga, reinizializzo la tabella e ordina automaticamente la nuova riga in base alle regole di ordinamento fornite. La mia domanda è questa: c'è un modo per ottenere i dati dalla tabella nell'ordine in cui è attualmente visualizzata? Ogni volta che provo $('#tableCompetitors').dataTable().fnGetData(), Mi dà i dati nell'ordine è stato aggiunto al tavolo non l'hanno ordinato che sia presentato in.Ottieni dati da Datatables.net dopo l'ordinamento

Così, c'è un modo semplice per fare quello che voglio?

P.S. Se aiuta L'origine dati originale è una matrice di matrici fornita da una casella di testo. Lo analizzo, lo sposto in una matrice, quindi uso quella matrice come origine dati.

+0

se si salva lo stato di ordinamento, sarebbe importante quale sia l'origine dati dell'ordine? – charlietfl

+0

Cosa intendi per salvare lo stato di ordinamento? Ho bisogno dei dati dopo averli ordinati in modo da poter creare una struttura di documenti basata sui dati ordinati. –

risposta

7

Ecco una soluzione che utilizza 3 dei callback API.

  1. Crea variabile per CurrentData
  2. Azzera CurrentData di array vuoto all'interno fnPreDrawCallback che spara prima che la nuova tabella è resa
  3. fnRowCallback dà accesso alla matrice di dati per ogni riga, spingere tale matrice in CurrentData matrice
  4. fnDrawCallback si attiva dopo il rendering della tabella, ora è possibile accedere ai dati ordinati nell'array CurrentData

JS

var currData = []; 
    $('#example').dataTable({ 
    "fnPreDrawCallback": function(oSettings) { 
     /* reset currData before each draw*/ 
     currData = []; 
    }, 
    "fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull) { 
     /* push this row of data to currData array*/ 
     currData.push(aData); 

    }, 
    "fnDrawCallback": function(oSettings) { 
     /* can now access sorted data array*/ 
     console.log(currData) 
    } 
}); 

DEMO: http://jsfiddle.net/ne24B/

+0

Questo funziona. Aspetterò e vedrò se ci sono altre soluzioni offerte prima di accettarlo. Grazie! –

+0

Questo è molto utile !!! Grazie – MaVRoSCy

2

Sto solo cercando di darvi un'altra opzione.

Di seguito otterrà tutte le righe della tabella, anche se sono filtrati:

var currData = []; 
var oTable = $('#example').dataTable(); 

oTable.$("tr").each(function(index, row){ 
    //generate your array here 
    // like $(row).children().eq(0) for the first table column 
    currData.push($(row).children().eq(0)); 
    // return the data in the first column 
    currData.push($(row).children().eq(0).text()); 
}); 

o se si desidera solo i risultati che corrispondono al filtro allora:

var currData = []; 
var oTable = $('#example').dataTable(); 

oTable.$("tr", {"filter":"applied"}).each(function(index, row){ 
    //generate your array here 
    // like $(row).children().eq(0) for the first table column 
    currData.push($(row).children().eq(0)); 

    // return the data in the first column 
    currData.push($(row).children().eq(0).text()); 
}); 

currData conterrà la lista ordinata dei primi dati della colonna.

Modifica: Per ottenere il testo dell'intera riga nell'array.

$(row + " td").each(function(index, tdData){ 
    currData.push($(tdData).text()); 
}); 

o

$(row).children().each(function(index, tdData){ 
    currData.push($(tdData).text()); 
}); 

In questo modo si ha un po 'più di controllo su ciò che l'array può contenere. I miei 2 centesimi.

+0

Cosa restituisce esattamente '$ (row) .children(). Eq (0)'? È un array che contiene i dati della riga? Lo proverei anch'io e lo scoprirò, ma sono lontano dalla mia macchina di sviluppo in questo momento. –

+0

Restituisce la prima colonna. Se vuoi i dati nella colonna potresti '$ (row) .children(). Eq (0) .text()' – Bret

+0

Voglio l'intera riga come una matrice. Posso solo fare '$ (row) .text(), o qualche altro voodoo simile? Questo codice sembra un po 'più pulito, quindi sono tentato di esplorarlo. –

7

Mi sono imbattuto in questo con la stessa domanda. Mentre la soluzione accettata può funzionare, ho trovato un modo migliore:

$("example").DataTable().rows({search:'applied'}).data() 

Vedi selector-modifier documentazione per ulteriori informazioni.

Problemi correlati