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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top