Utilizzando jQuery tablesorter per ordinare le date mm / aa
-
19-08-2019 - |
Domanda
Sto usando il plugin jquery tablesorter per ordinare una tabella. Sul mio le colonne nella mia tabella mostra la data nel formato mm / aa.
<tr>
<td class="col-name">...</td>
...
<td rel="2000" class="col-dob">10/00</td>
...
</tr>
<tr>
<td class="col-name">...</td>
...
<td rel="1986" class="col-dob">11/86</td>
...
</tr>
Nota:
- Ogni cella ha una classe unica
- La data viene visualizzata nel formato mm / aa
- La cella con data riceve anche l'anno
Il mio codice jQuery è il seguente:
// add parser through the tablesorter addParser method
$.tablesorter.addParser({
// set a unique id
id: 'user-birthdate',
is: function(s) {
// return false so this parser is not auto detected
return false;
},
format: function(s) {
// format your data for normalization
var dateSplit = s.split('/');
if(2 !== dateSplit.length)
return 0;
return new Date(dateSplit[1], dateSplit[0], 1);
},
// set type, either numeric or text
type: 'numeric'
});
myClass.init = function() {
$('.module .user table').tablesorter({
sortList: [[0,0]],
widgets: ['zebra'],
headers: {
5: {
sorter:'user-birthdate'
}
}
});
}
myClass.init();
Il mio problema è che tableSorter interpreta 00 come l'anno 1900 anziché 2000 e quindi i dati ordinati non sono corretti.
Qualche idea su come posso risolverlo? Sto usando jQuery 1.2.6 e l'ultima versione di tablesorter.
Soluzione
La documentazione di tableorter è spesso piuttosto inutile, ho scoperto. sembra come dice molto, ma manca di dettagli.
In questo caso, non ti dice la firma della funzione per un parser. Fortunatamente, puoi leggere il codice non mininato per trovarlo.
Lì troviamo che il metadata
parser fa questo:
format: function(s,table,cell) {
Ciò significa che puoi adattare il tuo metodo di formattazione a:
format: function(s, table, cell) {
// format your data for normalization
var dateSplit = s.split('/');
var year = $(cell).attr('rel');
if(2 !== dateSplit.length)
return 0;
return new Date(year, dateSplit[0], 1);
},
O almeno simile a quello. Non l'ho ancora provato. Ma dovrebbe essere almeno molto vicino.
Altri suggerimenti
Penso che scoprirai che il tuo problema è il costruttore della data e la stringa dell'anno a 2 cifre che stai passando senza chiarimenti: new Date(dateSplit[1], dateSplit[0], 1);
Non credo che tu possa (facilmente) accedere a rel in base a s nel parser. S contiene l'intero contenuto della cella? Puoi fare qualcosa nei dati nella cella come: <span style="display : none">CC</span>MM/YY
, eliminare i tag e quindi combinare CC con YY nel tuo analisi?