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.

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top