Mit jQuery tablesorter mm / jj Daten sortieren
-
19-08-2019 - |
Frage
Ich bin mit dem jquery tablesorter Plugin eine Tabelle zu sortieren. Auf meinen Spalten in meiner Tabelle zeigt das Datum in mm / jj Format.
<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>
Hinweis:
- Jede Zelle verfügt über eine einzigartige Klasse
- Das Datum wird im MM / JJ-Format angezeigt
- Zelle mit Datum empfängt das Jahr als auch
Mein jQuery-Code ist wie folgt:
// 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();
Mein Problem ist, dass die Tablesorter 00 als 1900 interpretiert statt 2000 und damit die sortierten Daten nicht korrekt ist.
Jede Ahnung, wie kann ich dieses Problem lösen? Ich bin mit jQuery 1.2.6 und der neuesten Version von tablesorter.
Lösung
Die tablesorter Dokumentation ist oft wenig hilfreich, die ich gefunden habe. Es sieht wie es viel sagt, aber in den Details fehlt.
In diesem Fall ist es nicht sagen, die Funktion Signatur für einen Parser. Glücklicherweise können Sie lesen der unminified Code es zu finden.
Dort finden wir, dass der metadata
Parser tut dies:
format: function(s,table,cell) {
Das bedeutet, dass Sie Ihr Format Methode anpassen können:
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);
},
oder zumindest ähnlich. Ich habe nicht wirklich diese getestet. Aber es sollte zumindest sehr nahe sein.
Andere Tipps
Ich glaube, Sie werden feststellen, dass Ihr Problem der Date-Konstruktor ist und das 2-stellige Jahr Zeichenfolge Sie vorbei, ohne Begriffsklärung: new Date(dateSplit[1], dateSplit[0], 1);
Ich glaube nicht, Sie können (leicht) Zugang zu erhalten, basierend auf s im Parser rel. Ist s den gesamten Inhalt der Zelle enthalten? Können Sie etwas in den Daten in der Zelle wie tun: <span style="display : none">CC</span>MM/YY
, die Tags abzustreifen und dann CC mit YY in Ihrem Parse kombinieren