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_1 32 Name_2 12 Name_3 11 name_4 14 Name_5 7 Name_6 3 Name_7 32 Name_8 31 Name_9 35
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)); };