7
votes

Utilisation de TableSorter JQuery pour trier les colonnes contenant des balises déroulantes (SELECT) et des panneaux de dollar ($)

J'utilise le fabuleux jQuery Plugin TableSorter pour ajouter automatiquement la fonctionnalité de tri sur les colonnes d'une table (simplement en cliquant sur l'en-tête de chaque colonne). Cela fonctionne parfaitement pour toutes les colonnes, sauf quelques-uns d'entre eux.

1) L'une des cellules de la colonne contient des panneaux de dollar à l'avant (tels que: 20 $, 10 $, 5 $). Le tri ne fonctionne pas correctement; Il trie par ordre alphabétique (et puisque tous les contenus cellulaires commencent par un $, ils ne sont tous pas correctement groupés ensemble). Quel code forcerait la trieuse à démarrer du deuxième caractère, ignorant ainsi les signes dollar?

2) Une autre colonne a des déposés dynamiques (1 sélectionnez une étiquette dans chaque cellule), et j'aimerais qu'elle trie par ordre alphabétique par les valeurs actuellement sélectionnées dans chaque étiquette de sélection. Des idées?

Si vous pouvez au moins me signaler à la bonne direction et donner une idée de la façon de personnaliser le tri dans chacun des deux scénarios, je l'apprécierais grandement.

Merci d'avance !!


0 commentaires

4 Réponses :


1
votes

Pour les données non standard (autre autre que le simple texte ou numériques, vous devez écrire un analyseur et l'ajouter via leur API. Voir ici: http://tabletter.com/docs/example-parsers.html

Je devais le faire pour les cellules de table ayant une valeur numérique (un pourcentage) et une image dans la même cellule. Vous pouvez essayer ceci pour que "1,58 $ de 1,58 $" soit trié au numéro 1.58 xxx


2 commentaires

Presque là! Je reçois des résultats de tri comme ceci maintenant: 1 341,00 $ puis 1 $ SUPP 2 731,00 $ (j'ai essayé de faire une place sur le personnage ',' (virgule), mais pas de chance ... aucune idée ...


Il semble faire la moitié de cela seulement. Maintenant, trie comme telle: 110,956,33 $ puis 118,29 $ (pas sûr de ce qui se passe).



3
votes

2) Une autre colonne a une dynamique Drop-downs (1 Sélectionnez la balise dans chaque cellule), et j'aimerais qu'il trier alphabétiquement la colonne par la Valeurs actuellement sélectionnées à l'intérieur de chaque Sélectionnez la balise. Des idées? P>

J'ai juste essayé d'y parvenir et ce n'est pas possible de manière simple. La chaîne que la fonction d'analyseur reçoit en tant que paramètre (..Format: fonction (s) {..) est déjà dépouillé des balises. Il n'est donc pas possible de déterminer quelle valeur est sélectionnée. Pour cela, la tablestorter devrait être modifiée. P>

Ce que j'ai fait maintenant, c'était d'ajouter une option cachée à l'avance avec la valeur sélectionnée. C'est une solution de contournement. Mais comme ça, il n'est même pas nécessaire d'écrire correctement votre propre analyseur et votre propre analyseur. P>

<option style="display:none">B</option>
<option value="A">A</option>
<option value="B" selected="selected">B</option>
<option value="C">C</option>
...
<option style="display:none">A</option>
<option value="A"  selected="selected">A</option>
<option value="B">B</option>
<option value="C">C</option>
  • babc li>
  • AABC LI> ul> blockQuote>

0 commentaires

3
votes

Si cela aide quelqu'un à essayer de le faire à l'avenir, j'ai trouvé une solution à: xxx

à l'aide d'un fourchette de tablesorter par Mottie . Il permet des fonctions d'extraction de texte personnalisées au niveau de la colonne (voir Documentation de Mottie ). Pour la colonne, je voulais trier (le premier dans ce cas, d'où l'index 0), j'ai initialisé avec: xxx

Je n'ai pas pu voir un moyen élégant de l'obtenir travailler avec l'original, tristement.


1 commentaires

C'est une solution bien meilleure que la réponse acceptée qui ajoute la possibilité de difficulté à trouver des bugs.



9
votes

Cela a fonctionné pour moi. Peut avoir besoin de peaufiner si aucune option n'est sélectionnée ... xxx pré>

Cette bibliothèque utilise une cache dans les versions plus récentes. Les mises à jour d'une liste déroulante exigent que le cache de la trieuse de table soit actualisé. Si le cache n'est pas rafraîchi, la colonne triera par la sélection d'origine de la liste déroulante et non son actuelle. P>

// hook into the select element's onchange event
$("td > select").change(function() {
        const config = $("table")[0].config;
        //refresh the cache so the newly selected element is used to sort with
        $.tablesorter.updateCache(config);
});


2 commentaires

Cela fonctionne bien, sauf qu'il ne met pas à jour l'ordre de tri lorsque vous modifiez une valeur sélectionnée. Quelqu'un a une solution pour cela?


@Tom a édité la réponse juste pour vous. J'ai aussi besoin de cet ajout pour mon projet.