Question

Je l'ai essayé pendant des jours maintenant pour obtenir jQuery tablesorter trier correctement les numéros dans ma colonne de table.

Je suis en utilisant les dernières versions actuelles des deux scripts.

Le tableau est rendu très bien, mais le tri des chiffres ne fonctionne pas correctement.

Quand trier une colonne de numéro, il me donne les résultats suivants:

8 sept 4 32 31 3 etc ..

où que vous attendez: 32 31 8 etc ...

J'ai lu quelques commentaires sur l'ajout de code supplémentaire javascript mais je ne peux pas trouver de bons exemples javascript.

Le jQuery J'utilise est maintenant comme suit:

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

Voici mon code 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>
Était-ce utile?

La solution 2

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

a résolu le problème. Dire le javascript pour gérer la valeur est comme un chiffre fait le travail de tri correct. bit encore stupide que les valeurs numériques ne sont pas vérifiées dans le script comme étant des nombres. Mais je crois qu'il ya un but plus élevé pour qu'en fin de compte.

Merci à tous pour votre temps et votre aide

/ Fons

Autres conseils

Espérons que cela aidera quelqu'un s'ils trouvent ce poste, en tablesorter vous pouvez maintenant utiliser simplement.

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

Cela peut être évident pour les autres (pas moi), mais pour obtenir la solution de travail avec le {trieuse: « chiffres »} métadonnées, vous devez utiliser le jQuery métadonnées plug-in .

Je sais que c'est une vieille question, mais je suis tombé sur le problème même et au lieu d'essayer toute solution ici affichée, vous devez d'abord vérifier la version de votre plugin. Chaque problème a été résolu quand j'ai découvert je n'étais pas en utilisant la dernière version (2.0.5)

On dirait que vous avez besoin de vos numéros pad. Cela explique pourquoi 8, 7 et 4 sont commandés avant 32 et 31.

Essayez ceci:

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

Utiliser la valeur supérieure à 2 si vous avez besoin pour trier plus grand nombre.

Vous pouvez essayer cela aussi:

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

... ce traite le contenu de cellules triées sous forme d'entiers, après l'extraction juste le texte.

Pouvez-vous montrer votre code html ainsi? Tablesorter doit détecter et gérer le tri numérique sans aucune option spéciale. Est-il possible que vos valeurs numériques sont entourées de html? Dans ce cas, vous devrez peut-être un personnalisé pour extraire les valeurs de le code html.

Exemple à partir du lien référencé:

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

Rechercher dans le code 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));
};

Et le remplacer par:

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));
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top