2013-10-04 5 views
5

Ecco il mio parser personalizzato:jQuery - tablesorter parser personalizzato non funziona

$.tablesorter.addParser({ 
    id: "customParser", 
    is: function (stringValue) { 
     return false; 
    }, 
    format: function (stringValue) { 
     var stringValueParts = stringValue.split("-"); 
     var numericPartOfStringValue = parseInt(stringValueParts[2]); 
     return numericPartOfStringValue ; 
    }, 
    type: 'numeric' 
}); 

stringValue avrà valori come:

  • ABC-DE-1
  • ABC-DE-10
  • ABC-DE-100
  • ABC-DE-101
  • ABC-DE-1000

Ecco il codice in cui ho impostato-up il tablesorter e aggiunto il parser di ordinamento:

$(function() { 
    $("#dataTable").tablesorter({ 
     headers: { 
      3: { 
       sorter: 'customParser' 
      } 
     } 
    }); 
}); 

ho aggiunto un console.log (numericPartOfStringValue) e tutti i numeri sono stati scritti fuori per la console così sembra che il parser stia facendo quello che dovrebbe fare.

Quindi cosa voglio accadere?

Voglio che i miei valori da ordinare da parte numerica della stringa come di seguito:

  • ABC-DE-1
  • ABC-DE-10
  • ABC-DE-100
  • ABC-DE-101
  • ABC-DE-1000

Cosa sta realmente accadendo?

I valori vengono ordinati in questo modo:

  • ABC-DE-1
  • ABC-DE-10
  • ABC-DE-100
  • ABC-DE-1000
  • ABC-DE-101

che altro ho provo?

ho aggiunto il seguente al mio html, ma non ha fatto la differenza:

<th class="{sorter: 'CustomParser'}"> 
    String Value Column 
</th> 

E infine:

Ecco un valore di esempio dalla cella della tabella:

<td> 
    <span class="badge">ABC-DE-1</span> 
</td> 
+0

Stai usando DataTable o tablesorter? Se vuoi continuare a usare tablesorter, prova il mio [fork of tablesorter] (http://mottie.github.io/tablesorter/docs/) che usa un ordinamento alfanumerico per impostazione predefinita. Quindi non c'è bisogno di un parser speciale nel tuo caso. – Mottie

+0

Stavo usando entrambi i datatables per il paging e il tablesorter per l'ordinamento. Il problema era che il mio parser per i tablesorter personalizzati non funzionava con il paging datatable. Non so perché non stavo usando l'ordinamento dei dati, quindi ho cambiato il mio codice per usare l'ordinamento dei dati adesso. Ho implementato un parser personalizzato nei datatables e tutto funziona ora. Pertanto, questa domanda è ridondante ora. Grazie per avere un'occhiata. –

risposta

3

Funzionante, è sufficiente impostare l'ordinamento predefinito. Ho usato sortList. che è una matrice di tuple che contengono il th-index e l'ordine (asc = 0, desc = 1).

lavoro fiddle:

$("#dataTable").tablesorter({ 
    sortList: [[0,0]], 
    headers: { 
      0: { 
       sorter: 'customParser' 
      } 
     } 
    }); 
+0

Grazie per il violino per dimostrarlo funzionante. Il tuo violino funziona senza "sortList: [[0,0]]" quando fai clic sull'intestazione della colonna, non viene ordinata per il caricamento. Non capisco davvero perché il mio codice non funzioni. Quindi questo mi ha bloccato. Sto usando il paging quindi ho pensato che forse questo potrebbe causare un problema. Quando rimuovo il paging, il mio codice originale funziona bene, quindi ora sospetto che sia qualcosa nel paging che impedisce a questo di funzionare. Sto usando datatables.net per il paging e il filtraggio, non ho idea del motivo per cui non sto usando anche datatables.net per l'ordinamento. Vado a controllare. –

+0

Ok, non ho capito perché il tablesorter non funzionava con il paging di datatables.net ma sono riuscito a usare l'ordinamento di datatables.net invece di tablesorter. Grazie per aver confermato che non era il mio codice quello era il problema. –

+0

@careywalker aggiorna il tuo post sopra e posso provare ad aiutarti. – Nix