Tri personnalisé des valeurs dans un attribut de tri de données avec des Datatables Jquery

je dois faire quelques sortes sur mesure avec des Datatables Jquery. Je ne veux pas écrire de tri personnalisé fonctions pour chaque tri personnalisé.

je veux définir une valeur à trier et avoir des datables ignorer les valeurs de la colonne d'origine, si la valeur est définie.

par exemple:

<td data-sort="111123">E 1.111,23</td>

je veux que Jquery Datatables trie numériquement cette colonne sur 111123 .

<td data-sort="19801220">20-12-1980</td>

je veux que Jquery Datatables trie numériquement cette colonne sur 19801220 .

<td>a string</td>

je veux que Jquery Datatables trie cette colonne par sa valeur originale a string .

http://www.datatables.net/plug-ins/sorting a "titre caché tri numérique numérique" qui est proche de ce que je veux, mais exige que je précise pour chaque datatable sur quelle colonne ce un tri personnalisé s'applique. J'ai trop de datatables de tailles différentes pour le faire dans un délai raisonnable. Je veux juste que les Datatables trient toujours cette valeur cachée / l'attribut data-* s'il est présent. Pas besoin de tri personnalisé définitions de colonnes spécifiques.

Related: jQuery DataTables: comment Trier par valeur de paramètre personnalisé plutôt que le contenu de la cellule? mais malheureusement pas de réponse quant à la façon de trier simplement par paramètre personnalisé, à la place pointeurs vers des scripts de tri personnalisés.

20
demandé sur Community 2013-11-29 16:44:21

2 réponses

vous pouvez utiliser data-order attr, par exemple

<table class="table table-bordered table-hover">
<thead>
    <tr>
        <th>Date</th>
        <th>Count</th>
    </tr>
</thead>
<tbody>
<?php
   $count = 0;
   foreach($users as $user) {?>
      <tr>
         <td data-order="<?php echo $count ?>">
            <?php echo $user['createdDate']; ?>
         </td>
         <td>
            <?php echo $user['count']; ?>
         </td>
         </tr>
   <?php
      $count++;
   }?>
   <tr>
      <td data-order="999999999999999999999999999"> <!--always last-->
          Total
      </td>
      <td>
         <?php echo count($users); ?>
      </td>
  </tr>

plus d'information données HTML5 - * attributs

20
répondu Vitall 2014-09-02 06:15:28

j'ai trouvé une solution facile qui fonctionne pour moi et ne nécessite pas trop de code ou de changements aux données.js.

Il est très similaire aux exigences de la question, mais pas exactement le même.

au lieu de data-sort vous pouvez utiliser une balise de commentaire HTML.

<td data-sort="111123">E 1.111,23</td>

devient

<td><!-- 000000111123 -->E 1.111,23</td>

par zero-padding un int ils sera trié comme un string . Le Zero-padding fait la sorte se comportent comme vous l'attendez: le tri des entiers de haut en bas.

Solution fonctionne pour les dates, des entiers et des chaînes de caractères. Pour les dates et les entrées, vous pouvez utiliser un langage de script pour les afficher de la manière que vous voulez (par exemple: zero-padded, formaté comme AAAA-mm-JJ).

13
répondu Pake Beet 2013-12-19 14:23:56