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:

  1. 4666
  2. 141.666
  3. 293
  4. 341.666
  5. 346
  6. 461.676

Esta deve ser classificado como

  1. 293
  2. 346
  3. 4666
  4. 141.666
  5. 341.666
  6. 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?

Foi útil?

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.

http://jsbin.com/equci5

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

Veja a fonte

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 ...!

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