2009-09-15 12 views
2

J'essaie d'écrire un analyseur personnalisé pour le plugin jQuery, Tablesorter. L'idée est de trier les numéros dans l'ordre décroissant du premier clic.jQuery Tablesorter - l'analyseur personnalisé ne fonctionne pas

Cependant, lorsque je trier la table, l'ordre ne change pas. Parfois, quelques rangées bougent, mais la plupart d'entre elles restent identiques. Voici le code:

$.tablesorter.addParser({ 
    id: 'desc', 
    is: function(s) { return false }, 
    format: function(s) { 
     return 1.0/parseFloat(s.replace(/,/g,'')); 
    }, 
    type: 'numeric' 
}); 

Les autres analyseurs que j'ai écrits fonctionnent correctement. J'ai essayé 9999 moins le nombre au lieu de 1.0 divisé par lui, au cas où il y avait un problème avec des flotteurs (pas de chance).

Répondre

2

J'ai trouvé une solution. J'avais des cellules vides dans chaque colonne, qui étaient analysées comme "NaN". Pourquoi cela a tordu la commande, je ne sais pas (les cellules vides étaient espacées par intermittence avec des numéros réguliers, il n'y avait pas d'ordre à quoi que ce soit).

En bref, ce code fonctionne pour la fonction Format:

format: function(s) { 
    if (s == '') 
    return 0; 
    return -parseInt(s.replace(/,/g,'')); 
} 
+0

Bonne prise avec les champs vides. N'a même pas considéré cette possibilité de lire votre OP. –

0

Pour trier quelque chose dans l'ordre numérique inverse, pour moi, la méthode naturelle consiste à la multiplier par -1 plutôt que par les méthodes que vous avez essayées.

En ce qui concerne l'analyseur lui-même, la seule différence que je remarque est que vous renvoyez un nombre réel, tandis que le parser example sur le site Tablesorter renvoie une chaîne. Peut-être convertir la valeur en chaîne avant de la retourner fonctionnerait?

+0

est-il pas un certain nombre retournaient? 'replace (/ bad /, 0)' retournerait 0, plutôt que "0", n'est-ce pas? – DisgruntledGoat

+0

Non, 'replace' renvoie toujours une chaîne. Vous devez utiliser parseInt, comme vous l'avez fait dans la solution que vous avez publiée il y a un instant. –