JQuery TableSorter vírgula-Digit Parser não funcionando
-
22-08-2019 - |
Pergunta
Aqui está o meu problema,
Atualmente, estou usando o JQuery Tabela Sorter e eu encontrei um analisador de vírgula-Digit na web. O problema que estou tendo é que não parece estar funcionando.
Então aqui está o que a coluna é classificada como:
- 4666
- 141.666
- 293
- 341.666
- 346
- 461.676
Esta deve ser classificado como
- 293
- 346
- 4666
- 141.666
- 341.666
- 461.676
O analisador que estou usando é o seguinte:
$( function() {
$.tablesorter.addParser({
id: "fancyNumber",
is: function(s) {
return /^[0-9]?[0-9,\.]*$/.test(s);
},
format: function(s) {
return $.tablesorter.formatFloat(s.replace(/,/g, ''));
},
type: "numeric"
});
});
Eu só não sei que estou fazendo de errado. Am I carregá-lo errado? É o errado analisador? Preciso de ajuda real aqui e têm lutado com este problema por um tempo agora.
Editar: Por causa de como eu gerar minhas colunas e as colunas autorizados a ser escolhido pelo usuário, eu nunca sei qual cabeçalho está dentro e não. Eu tentei usar o class = "{classificador: 'fancyNumber'}" comando como indicado aqui: http://tablesorter.com/docs/example-meta-parsers.html
** Edit: ** Parece que uma das colunas está funcionando corretamente, mas essa coluna ainda está tendo problemas. talvez porque tem dígitos e vírgula dígitos separados?
Solução
Para qualquer um que se depara com esta questão. Eu tive que adicionar a classe à minha linha de cabeçalho. Assim, para qualquer cabeçalho que eu queria fantasia tipo, eu adicionei essa classe:
<th class=\"{sorter: 'fancyNumber'}\">
Esta ligado o classificador por padrão, que fez o trabalho agradável.
O que me fez perceber o meu erro nos meus caminhos foi ligar o depurador assim.
$("#tblInfo").tablesorter({debug:true, widgets: ['zebra'], widgetZebra: { css: ['d0', 'd1']} });
Outras dicas
Isto também pode acontecer se você esquecer de incluir os metadados do plugin
** Postado aqui uma vez que este foi o primeiro resultado de pesquisa no Google.
aqui o que eu fiz:
$(document).ready(function() {
$.tablesorter.addParser({
id: 'fancyNumber',
is:function(s){return false;},
format: function(s) {return s.replace(/[\,\.]/g,'');},
type: 'numeric'
});
$("table").tablesorter({headers: {0: {sorter: 'fancyNumber'}}});
});
trabalhou com vírgula e ponto de separação.
Eu encontrei uma solução que funcionou para mim. Nos tablesorter.js, modificar o formatFloat () função da seguinte forma:
this.formatFloat = function (s) {
var i = parseFloat(s.replace(/[,]/g, ''));
return (isNaN(i)) ? 0 : i;
};
Isto irá substituir as vírgulas que estavam interferindo com a classificação. Encontrou a resposta aqui . Espero que isso ajude ...!
Tente explicitamente atribuindo o analisador na declaração .tablesorter ().
.tablesorter( { headers: { 0: { sorter:'fancyNumber' } });
Como Jared mencionou, você precisa especificar quais os usos que Parser, se você não souber o índice da coluna, em seguida, você pode encontrar coluna que a nossa usando o seguinte:
var fancyIndex = $('th.fancyColumn').prevAll().length
var headers = {};
headers[fancyIndex] = {sorter:'fancyNumber'}
$("table").tablesorter({headers:headers})
I, tente esta expressão regular: / (\ d {1,3}) (\, \ d {3}) * /
Os analisadores só olhar para a primeira linha tbody para detectar qual analisador para usar. Eu estou supondo que sua primeira linha não tem nenhum vírgulas nele. Corri para o mesmo problema, e, finalmente, apenas forçou o analisador eu queria, usando class = "{classificador: 'fancyNumber'}"
Você está completamente correto que o analisador deve estar trabalhando, a razão não é é devido a um bug no plugin. Em suma o plugin pensa que pode ordenar os números com vírgulas corretamente, e assim usa construído em sua classificador, mas depois deixa de classificá-los corretamente.
Existem algumas maneiras de corrigi-lo.
Em primeiro lugar você pode (como sugerido acima) forçar o uso de sua função de classificação (quer na ou no javascript na inicialização do plugin).
Em segundo lugar você pode editar o plugin para usar suas funções em detrimento de seu próprio país, isto pode ser conseguido, invertendo a direção do loop for na linha 220 do plugin.
Em terceiro lugar você pode corrigir o padrão quebrado ordenação comportamento modificando tanto a função de detecção de dígitos para não aceitar vírgulas (linha 861 do plugin) ou modificando o classificador de número padrão de vírgulas punho (linha 852 do plugin).
Eu tenho levantado essa questão na página de código google tablesorter: http: //code.google.com/p/tablesorter/issues/detail?id=6
Eu encontrei uma solução que funcionou para mim. Nos tablesorter.js, modificar a função formatFloat () como se segue:
this.formatFloat = function (s) {
s = s.toString();
var i = parseFloat(s.replace(/[,]/g, ''));
return (isNaN(i)) ? 0 : i;
};
Isto irá substituir as vírgulas que estavam interferindo com a classificação. Encontrou a resposta aqui. Espero que isso ajude ...!