jQuery tablesorter ne sortinge pas le nombre correctement

Cela fait plusieurs jours que j’essaie d’obtenir de jQuery tablesorter un sorting correct des nombres dans la colonne de ma table.

J’utilise les dernières versions actuelles des deux scripts.

Le tableau est bien rendu, mais le sorting des nombres ne fonctionne pas correctement.

Lorsque je sortinge une colonne de nombres, les résultats suivants sont obtenus:

8 7 4 32 31 3 etc ..

où vous vous attendez: 32 31 8 etc …

J’ai lu des commentaires sur l’ajout de code javascript supplémentaire, mais je ne trouve aucun bon exemple javascript.

Le jQuery que j’utilise maintenant est le suivant:

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

Voici mon HTML:

 
Name Count
Name_132
Name_212
Name_311
name_414
Name_57
Name_63
Name_732
Name_831
Name_935

J’espère que cela aidera quelqu’un s’il trouve ce post. Vous pouvez maintenant l’utiliser simplement dans tablesorter.

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

Cela a résolu le problème. Dire au javascript de gérer la valeur sous forme de chiffre rend le sorting correct. Encore un peu idiot, les valeurs numériques ne sont pas cochées dans le script. Mais je suppose qu’il ya un objective plus élevé à la fin.

Merci à tous pour votre temps et votre aide

/ Fons

Cela a peut-être été évident pour les autres (pas pour moi), mais pour que la solution fonctionne avec les métadonnées {sorter: ‘digit’}, vous devez utiliser le plug-in de métadonnées jQuery .

Je sais que c’est une vieille question, mais j’ai rencontré le même problème et au lieu d’essayer TOUTES les solutions postées ici, vous devriez d’abord vérifier la version de votre plugin. Chaque problème a été résolu quand j’ai découvert que je n’utilisais pas la dernière version (2.0.5).

Il semble que vous deviez composer vos chiffres. Cela explique pourquoi 8, 7 et 4 sont commandés avant les 32 et 31.

Essaye ça:

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

Utilisez une valeur supérieure à 2 si vous devez sortinger des nombres plus grands.

Vous pouvez aussi essayer ceci:

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

… le contenu des cellules sortingées est traité comme un entier après l’extraction du texte.

Pouvez-vous montrer votre code HTML aussi? Tablesorter doit détecter et gérer le sorting numérique sans options spéciales. Est-il possible que vos valeurs numériques soient entourées de HTML? Dans ce cas, vous aurez peut-être besoin d’une méthode personnalisée pour extraire les valeurs du code HTML.

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

Recherchez 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($.sortingm(s)); }; 

Et remplacez-le 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($.sortingm(s)); return !isNaN(parseFloat($.sortingm(s))) && isFinite($.sortingm(s)); };