web-dev-qa-db-fra.com

Tri personnalisé sur les valeurs d'un attribut de tri de données avec Jquery Datatables

Je dois faire des tris personnalisés avec Jquery Datatables. Je ne veux pas écrire de fonctions de tri personnalisées pour chaque tri personnalisé.

Je veux définir une valeur sur laquelle trier et que les tables de données ignorent les valeurs de colonne d'origine, si la valeur est définie.

Par exemple:

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

Je souhaite que Jquery Datatables trie cette colonne numériquement sur 111123.

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

Je souhaite que Jquery Datatables trie cette colonne numériquement sur 19801220.

<td>a string</td>

Je souhaite que Jquery Datatables trie cette colonne selon sa valeur d'origine a string.

http://www.datatables.net/plug-ins/sorting a "Tri numérique du titre caché" qui est proche de ce que je veux, mais m'oblige à spécifier pour chaque table de données sur quelle colonne cette coutume le tri s'applique. J'ai trop de tables de données de tailles différentes pour le faire dans un délai raisonnable. Je veux juste que Datatables trie toujours cet attribut value/data- * caché s'il est présent. Pas besoin de définitions de tri personnalisées sur des colonnes spécifiques.

Connexes: jQuery DataTables: comment trier par valeur de paramètre personnalisé plutôt que par le contenu de la cellule? mais malheureusement aucune réponse quant à la façon de trier simplement par paramètre personnalisé, au lieu de cela pointe vers des scripts de tri personnalisés.

24
Pake Beet

Vous pouvez utiliser attr de l'ordre des données, 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'informations données HTML5- * attributs

24
Vitall

J'ai trouvé une solution facile qui fonctionne pour moi et ne nécessite pas trop de code ou de modifications de datatables.js.

Elle est très similaire aux exigences de la question, mais pas exactement la 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>

En remplissant à zéro un int, ils seront triés comme string. Le remplissage nul fait que le tri se comporte comme prévu: tri des entiers de haut en bas.

La solution fonctionne pour les dates, les entiers et les chaînes. Pour les dates et les entiers, vous pouvez utiliser un langage de script pour les produire comme vous le souhaitez (par exemple: zéro-rembourré, formaté en aaaa-mm-jj).

13
Pake Beet