Usando jQuery tablesorter a sorte mm / datas aa
-
19-08-2019 - |
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.
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