2009-05-18 8 views
2

Voici mon problème,JQuery tablesorter Comma chiffres Parser ne fonctionne pas

J'utilise actuellement le JQuery Tableau Sorter et je l'ai trouvé un analyseur Comma chiffres sur le web. Le problème que je suis est que cela ne semble pas fonctionner.

Voici donc ce que la colonne est triée comme:

  1. 4.666
  2. 141.666
  3. 341.666
  4. 461.676

Cela devrait être Trier ed comme

  1. 4.666
  2. 141.666
  3. 341.666
  4. 461.676

L'analyseur J'utilise est le suivant:

$(function() { 

    $.tablesorter.addParser({ 
     id: "fancyNumber", 
     is: function(s) { 
      return /^[0-9]?[0-9,\.]*$/.test(s); 
     }, 
     format: function(s) { 
      return $.tablesorter.formatFloat(s.replace(/,/g, '')); 
     }, 
     type: "numeric" 
    }); 
}); 

Je ne sais pas si je me trompe. Est-ce que je le charge mal? L'analyseur est-il mauvais? J'ai besoin d'aide réelle ici et j'ai lutté avec ce problème pendant un moment maintenant.

Modifier: En raison de la façon dont je génère mes colonnes et les colonnes autorisées à être choisies par l'utilisateur, je ne saurais jamais quel en-tête est dedans et non. J'ai essayé d'utiliser la commande class = "{sorter: 'fancyNumber'}" comme indiqué ici: http://tablesorter.com/docs/example-meta-parsers.html

** Edit: ** Il semble que l'une des colonnes fonctionne correctement, mais cette colonne a toujours des problèmes . peut-être parce qu'il a des chiffres et des chiffres séparés par des virgules?

Répondre

10

Pour tous ceux qui rencontrent cette question. Je devais ajouter la classe à ma rangée d'en-tête. Donc, pour l'en-tête que je voulais genre de fantaisie, j'ai ajouté cette classe:

<th class=\"{sorter: 'fancyNumber'}\"> 

Cette activée par défaut la trieuse qui fait le travail agréable. Ce qui m'a fait réaliser que mon erreur était dans mes habitudes était d'allumer le débogueur comme si.

$("#tblInfo").tablesorter({debug:true, widgets: ['zebra'], widgetZebra: { css: ['d0', 'd1']} }); 
+1

Cool. Bon travail. – Jared

+1

Vous n'êtes pas obligé de le faire. L'option headers vous permet de spécifier le type de données. Regardez http://tablesorter.com/docs/example-parsers.html là et voir. Dans vos options, vous spécifiez simplement 'headers: {5: 'mysorter'}' et hop, hop. – Kezzer

+2

Ce n'est pas bon quand vous avez un nombre dynamique de colonnes. Par exemple. parfois cette colonne est la colonne 5 dans une table et la colonne 4 dans une autre table. En le mettant directement dans la TH, vous vous assurez qu'il fonctionne partout. Je n'aime pas spécifier les numéros de colonne numériquement codés en dur. – Aaron

0

Essayez d'affecter explicitement l'analyseur dans la déclaration .tablesorter().

.tablesorter({ headers: { 0: { sorter:'fancyNumber' } }); 

See the source

+0

En raison de la façon dont je génère mes colonnes et les colonnes autorisées à être choisies par l'utilisateur, je ne saurais jamais quel en-tête est dedans et non. J'ai essayé d'utiliser la commande class = "{sorter: 'fancyNumber'}" comme indiqué ici: http://tablesorter.com/docs/example-meta-parsers.html –

+0

Je peux voir ça. Est-ce que tablesorter utilise un analyseur différent pour les colonnes "fancyNumber"?Serait-il judicieux de déplacer la création des analyseurs au-dessus des autres pour qu'elle soit la première dans la colonne, au cas où l'un des autres parseurs serait sélectionné en premier? – Jared

+0

Jared, Comment pourrais-je savoir si son utilisation d'un analyseur différent? J'utilise la version mini du trieur donc je ne peux pas mettre exactement cet analyseur à l'avant ... Ma pensée est que c'est la regarder comme un nombre pour quelques lignes et un nombre avec une virgule pour les autres. .. Pour une raison quelconque, il ne fonctionne pas correctement .. –

0

Comme Jared a mentionné, vous devez spécifier quelle colonne utilise ce qui Parser, si vous ne connaissez pas l'index de la colonne, vous pouvez le trouver en utilisant notre ceci:

var fancyIndex = $('th.fancyColumn').prevAll().length 
var headers = {}; 
headers[fancyIndex] = {sorter:'fancyNumber'} 

$("table").tablesorter({headers:headers}) 
+0

Ducky, la deuxième ligne ne fonctionne pas ... Il dit qu'il manque a; à l'emplacement [ où l'en-tête est déclaré. –

+0

@Scott essayer maintenant, j'ai oublié d'ajouter var headers = {}; ligne – duckyflip

+0

@ducky, Non, toujours pas. Un j'ai utilisé votre idée, une autre colonne qui a été mal trié a commencé à fonctionner correctement. Peut-être que c'est juste cette colonne qui a des problèmes ... Peut-être parce qu'il y a un entier et un entier séparé par des virgules dans la même colonne? –

0

I, essayer cette expression régulière:/(\ d {1,3}) (\, \ d {3}) */

3

Cela peut également se produire si vous oubliez d'inclure la? plugin de métadonnées

** Publié ici car il s'agit du premier résultat de recherche sur Google.

+1

Je m'arrache les cheveux depuis des heures. Je ne suis pas sûr si la documentation est mauvaise ou je suis juste un idiot, mais sûrement ils devraient noter que les métadonnées sont un plugin de jquery. C'est super comment votre commentaire, 2 ans plus tard, a réussi à m'aider. –

0

Les analyseurs ne regardent que la première ligne de tbody pour détecter quel analyseur utiliser. Je suppose que votre première rangée n'a pas de virgules. Je suis tombé sur le même problème, et enfin juste forcé l'analyseur que je voulais, en utilisant class = « {trieuse: « fancyNumber »} »

2

ici ce que je l'ai fait:

$(document).ready(function() { 
     $.tablesorter.addParser({ 
     id: 'fancyNumber', 
     is:function(s){return false;}, 
     format: function(s) {return s.replace(/[\,\.]/g,'');}, 
     type: 'numeric' 
    }); 
    $("table").tablesorter({headers: {0: {sorter: 'fancyNumber'}}}); 
}); 

travaillé avec des virgules et séparateur de points.

test, il http://jsbin.com/equci5

0

Vous êtes tout à fait exact que l'analyseur devrait fonctionner, la raison pour laquelle il n'est pas est dû à un bug dans le plugin. En bref, le plugin pense qu'il peut trier correctement les nombres avec des virgules, et utilise donc son trieur intégré, mais ne parvient pas à les trier correctement.

Il y a plusieurs façons de le réparer. D'abord, vous pouvez (comme vous l'avez suggéré plus haut) forcer l'utilisation de votre fonction de tri (soit dans le javascript, soit dans le javascript lors de l'initialisation du plugin).

Deuxièmement, vous pouvez modifier le plugin pour utiliser vos fonctions de préférence à la vôtre, cela peut être réalisé en inversant la direction de la boucle for sur la ligne 220 du plugin. Troisièmement, vous pouvez corriger le comportement de tri par défaut en modifiant la fonction de détection des chiffres pour ne pas accepter les virgules (ligne 861 du plugin) ou en modifiant le trieur par défaut pour gérer les virgules (ligne 852 du plugin).

J'ai soulevé cette question sur la page tablesorter code google: http://code.google.com/p/tablesorter/issues/detail?id=6

2

J'ai trouvé une solution qui a fonctionné pour moi. Dans les tablesorter.js, modifier le FormatFloat() fonction comme suit:

this.formatFloat = function (s) { 
      var i = parseFloat(s.replace(/[,]/g, '')); 
      return (isNaN(i)) ? 0 : i; 
     }; 

Cela remplace les virgules qui interféraient avec le tri. trouvé la réponse here. Espérons que cela aide ...!

0

J'ai trouvé une solution qui a fonctionné pour moi. Dans les tablesorter.js, modifier la fonction FormatFloat() comme suit:

this.formatFloat = function (s) { 
      s = s.toString(); 
      var i = parseFloat(s.replace(/[,]/g, '')); 
      return (isNaN(i)) ? 0 : i; 
     }; 

Cela remplace les virgules qui interféraient avec le tri. Trouvé la réponse ici. J'espère que cela t'aides...!