Pergunta

Eu estou usando o jquery tablesorter plugin para classificar uma tabela. Das minhas colunas em meus tabela mostra a data no 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:

  • Cada célula tem uma classe única
  • A data é exibida no formato mm / aa
  • celular com data recebe o ano bem

código meu jQuery é como abaixo:

// 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();

O meu problema é que os interpreta Tablesorter 00 como ano de 1900 em vez de 2000 e, portanto, os dados ordenados não é correto.

Qualquer idéia de como posso resolver isso? Eu estou usando jQuery 1.2.6 ea versão mais recente do tablesorter.

Foi útil?

Solução

A documentação tablesorter muitas vezes é bastante inútil, eu encontrei. É aparência como se diz muito, mas está faltando nos detalhes.

Neste caso, ele não lhe dizer a assinatura da função para um analisador. Felizmente, você pode ler o código unminified para encontrá-lo.

Não achamos que o analisador metadata faz isso:

format: function(s,table,cell) {

Isto significa que você pode ajustar o seu método de formato para:

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);
},

Ou, pelo menos, semelhante a isso. Eu realmente não tenho testado isso. Mas deve ser, pelo menos, muito perto.

Outras dicas

Eu acho que você vai achar que o seu problema é o construtor Data ea cadeia de ano de 2 dígitos que você está passando sem disambiguation: new Date(dateSplit[1], dateSplit[0], 1);

Eu não acho que você pode (facilmente) tenha acesso aos rel com base no s no analisador. Será s conter todo o conteúdo da célula? você pode fazer algo nos dados na célula como:? <span style="display : none">CC</span>MM/YY, retirar as etiquetas e, em seguida, combinar CC com YY em sua análise

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top