Domanda

Ho cercato per giorni ora per ottenere jQuery tablesorter correttamente ordinare i numeri nella mia colonna della tabella.

Sono utilizzando le attuali versioni più recenti di entrambi gli script.

La tabella è resa bene, ma l'ordinamento i numeri non funziona correttamente.

Quando ho ordinare una colonna serie mi dà i seguenti risultati:

8 7 4 32 31 3 etc ..

dove ci si aspetterebbe: 32 31 8 ecc ...

Ho letto alcuni commenti su come aggiungere il codice JavaScript in più, ma non riesco a trovare qualsiasi buoni esempi Javascript.

Il jQuery che sto usando ora è la seguente:

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

Ecco il mio 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>
È stato utile?

Soluzione 2

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

Questo ha risolto il problema. Raccontare la javascript per gestire il valore è come una cifra reso il lavoro di ordinamento corretto. Ancora po 'sciocco che i valori numerici non vengono controllati nello script come numeri. Ma credo che ci sia uno scopo più alto per questo, alla fine.

Grazie a tutti per il vostro tempo e aiuto

/ Fons

Altri suggerimenti

Speriamo che questo vi aiuterà qualcuno se trovano questo post, in tablesorter è ora possibile semplicemente utilizzare.

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

Questo può essere stato ovvio per gli altri (non a me), ma per ottenere la soluzione di lavoro con {sorter: 'cifre'} metadati è necessario utilizzare il jQuery metadati plug .

So che questa è una vecchia questione, ma mi sono imbattuto lo stesso problema e invece di cercare qualsiasi soluzione postato qui, si dovrebbe innanzitutto verificare la versione del plug-in. Ogni problema è stato risolto quando ho scoperto che wasnt utilizzando la versione più recente (2.0.5)

Sembra che avete bisogno di pad tuoi numeri. Questo spiega perché 8, 7, e 4 sono ordinate prima del 32, e 31.

Prova questo:

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

Utilizza valore superiore a 2 se hai bisogno di ordinare i numeri più grandi.

Si potrebbe provare anche questo:

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

... questo tratta il contenuto delle celle ordinate come numeri interi, dopo l'estrazione solo il testo.

Si può mostrare il vostro html come bene? Tablesorter dovrebbe rilevare e gestire l'ordinamento numerico senza opzioni speciali. E 'possibile che i valori numerici sono circondati da html? In tal caso potrebbe essere necessario un per estrarre i valori dal il codice html.

Esempio dal link di riferimento:

$(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; 
        } 
    }); 
});

Trova nel codice 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 sostituirlo con:

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));
};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top