2009-01-16 17 views
6

Ich verwende das jquery tablesorter-Plugin zum Sortieren einer Tabelle. Auf meinem zeigen die Spalten in meiner Tabelle das Datum im Millimeter-/yyformat an.Verwenden von jQuery tablesorter zum Sortieren von MM/JJ-Daten

<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
  • Datum im MM/JJ-Format angezeigt wird
  • Zelle mit Datum und das Jahr erhält

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 der TableSorter 00 als Jahr 1900 statt 2000 interpretiert und daher die sortierten Daten nicht korrekt sind.

Irgendwelche Hinweise, wie kann ich das beheben? Ich benutze jQuery 1.2.6 und die neueste Version von tablesorter.

Antwort

9

Die Tablesorter-Dokumentation ist oft nicht hilfreich, habe ich gefunden. Es sieht wie es viel sagt, aber in den Details fehlt.

In diesem Fall gibt es Ihnen nicht die Funktionssignatur für einen Parser. Glücklicherweise können Sie the unminified code lesen, um es zu finden.

Dort finden wir, dass die metadata Parser dies tun:

format: function(s,table,cell) { 

Dies bedeutet, dass Sie Ihr Format Methode justieren:

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 das nicht wirklich getestet. Aber es sollte zumindest sehr nahe sein.

+0

Danke David. Warten, um das am Montag zu testen. Wird hier aktualisiert. – hitec

+0

Diese Lösung behebt mein Problem. Danke David. – hitec

+0

Dies war auch nützlich beim Sortieren einer Datumsspalte, die einige leere Werte hatte. Danke für das Posten. –

0

Ich glaube, Sie werden feststellen, dass Ihr Problem der Date-Konstruktor ist und das 2-stellige Jahr Zeichenfolge ohne Begriffsklärung vorbei sind: new Date(dateSplit[1], dateSplit[0], 1);

Ich glaube nicht, Sie können (leicht) Zugang erhalten auf rel basierend s im Parser. Enthält s den gesamten Inhalt der Zelle? Können Sie etwas in den Daten in der Zelle tun wie: <span style="display : none">CC</span>MM/YY, entfernen Sie die Tags und kombinieren Sie dann CC mit YY in Ihrem Parse?

+0

Glücklicherweise wird die Parser-Funktion auch das Zellobjekt übergeben. Siehe meine Antwort. :) – David

Verwandte Themen