Pergunta

Eu tenho tentado por dias agora para obter jQuery tablesorter corretamente classificar números na minha coluna da tabela.

Eu estou usando as versões mais recentes correntes de ambos os scripts.

A tabela é processada bem, mas classificando os números não está funcionando corretamente.

Quando eu ordenar uma coluna número que me dá os seguintes resultados:

8 7 4 32 31 3 etc ..

onde você esperaria: 32 31 8 etc ...

Eu li alguns comentários sobre a adição de código javascript extra, mas não consigo encontrar qualquer exemplos boa javascript.

O jQuery Eu estou usando agora é a seguinte:

$(document).ready(function()
    {
      $("#table1")
       .tablesorter(
          {
            sortList: [[0,0]],
            widthFixed: true,
            widgets: ['zebra']
          } )
    }
);

Aqui está o meu HTML:

<table id="table1" class=tablesorter>
    <thead>
        <tr>
            <th width=65>Name</th>
            <th width=40>Count</th>
        </tr>
     </thead>
     <tbody>
         <tr><td>Name_1</td><td>32</td></tr>
         <tr><td>Name_2</td><td>12</td></tr>
         <tr><td>Name_3</td><td>11</td></tr>
         <tr><td>name_4</td><td>14</td></tr>
         <tr><td>Name_5</td><td>7</td></tr>
         <tr><td>Name_6</td><td>3</td></tr>
         <tr><td>Name_7</td><td>32</td></tr>
         <tr><td>Name_8</td><td>31</td></tr>
         <tr><td>Name_9</td><td>35</td></tr>
      </tbody>
</table>
Foi útil?

Solução 2

<th width=110 class=\"{sorter: 'digit'}\">Count</th>

Isso resolveu o problema. Dizer a javascript para lidar com o valor é como um dígito fez o trabalho de classificação correta. Ainda pouco bobo que valores numéricos não são verificados no script como sendo números. Mas eu acho que há um propósito mais elevado para que, no final.

Obrigado a todos por seu tempo e ajuda

/ Fons

Outras dicas

Esperemos que isto irá ajudar alguém a se encontrar este post, em tablesorter agora você pode simplesmente usar.

$(".table").tablesorter({
     headers: {
         5: { sorter: 'digit' } // column number, type
     }
 });

Este pode ter sido óbvio para os outros (não para mim), mas para obter a solução de trabalho com o {classificador: 'dígitos'} metadados que você precisa para usar o jQuery metadados do plugin .

Eu sei que isto é uma questão de idade, mas me deparei com o mesmo problema e em vez de tentar qualquer solução postada aqui, você deve primeiro verificar a versão do seu plugin. Cada problema foi resolvido quando eu descobri que eu não estava usando a versão mais recente (2.0.5)

Parece que você precisa para preencher seus números. Isso explica porque 8, 7 e 4 são ordenados antes de 32 e 31.

Tente isto:

function padLeft(s,len,c){
  c=c || '0';
  while(s.length< len) s= c+s;
  return s;
}

$("table").tablesorter({
  textExtraction: function(node) {         
    return padLeft(node.innerHTML,2);
  } 
});

Use valor superior a 2 se você precisa para classificar números maiores.

Você pode tentar isso também:

$(document).ready(function() { 
    $("table").tablesorter({ 
        // put other options here ...
        textExtraction: function(node) {  
            return parseInt($(node).text()); 
        } 
    }); 
});

... este trata de conteúdo das células classificadas como inteiros, depois de extrair apenas o texto.

Você pode mostrar sua html bem? Tablesorter deve detectar e lidar com a classificação numérica, sem quaisquer opções especiais. É possível que os valores numéricos são cercados por html? Nesse caso, você pode precisar de um href="http://tablesorter.com/docs/example-option-text-extraction.html" rel="nofollow noreferrer"> método os valores de o html.

Exemplo a partir do link de referência:

$(document).ready(function() { 

    // call the tablesorter plugin 
    $("table").tablesorter({ 
        // define a custom text extraction function 
        textExtraction: function(node) { 
            // extract data from markup and return it  
            return node.childNodes[0].childNodes[0].innerHTML; 
        } 
    }); 
});

Encontre em código jquery.tablesorter.js:

this.isDigit = function(s,config) {

    var DECIMAL = '\\' + config.decimal;
    var exp = '/(^[+]?0(' + DECIMAL +'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)' + DECIMAL +'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*' + DECIMAL +'0+$)/';

    return RegExp(exp).test($.trim(s));
};

E substituí-lo com:

this.isDigit = function(s,config) {

    var DECIMAL = '\\' + config.decimal;
    var exp = '/(^[+]?0(' + DECIMAL +'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)' + DECIMAL +'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*' + DECIMAL +'0+$)/';

    //return RegExp(exp).test($.trim(s));
    return !isNaN(parseFloat($.trim(s))) && isFinite($.trim(s));
};
scroll top