web-dev-qa-db-ja.com

Jquery Datatablesを使用したデータ並べ替え属性の値のカスタム並べ替え

Jquery Datatablesでいくつかのカスタムソートを行う必要があります。カスタムソートごとにカスタムソート関数を記述したくありません。

ソートする値を定義し、値が定義されている場合、Datatablesに元の列の値を無視させます。

例えば:

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

Jquery Datatablesが111123でこの列を数値的にソートするようにします。

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

Jquery Datatablesが19801220でこの列を数値的にソートするようにします。

<td>a string</td>

Jquery Datatablesでこの列を元の値a stringで並べ替えたい。

http://www.datatables.net/plug-ins/sorting には「隠しタイトルの数値ソート」があり、これは私が望むものに近いですが、このカスタムのどの列のすべてのデータテーブルに指定する必要があります並べ替えが適用されます。さまざまなサイズのデータ​​テーブルが多すぎて、妥当な時間内にこれを行うことができません。 Datatablesに、この隠された値/ data- *属性が存在する場合、常にそれらをソートするようにします。特定の列にカスタムソート定義は必要ありません。

関連: jQuery DataTables:セルのコンテンツではなくカスタムパラメーター値でソートする方法? しかし、残念ながらカスタムパラメーターで単純にソートする方法については答えがありません。代わりにカスタムソートスクリプトへのポインター。

24
Pake Beet

たとえば、データ順序属性を使用できます。

<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>

詳細 HTML5データ-*属性

24
Vitall

私にとって便利で、datatables.jsのコードや変更をあまり必要としない簡単なソリューションを見つけました。

質問の要件に非常に似ていますが、まったく同じではありません。

の代わりに data-sort HTMLコメントタグを使用できます。

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

になる

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

intをゼロでパディングすることにより、stringとしてソートされます。ゼロパディングにより、ソートは期待どおりに動作します。整数を高から低にソートします。

解決策は、日付、整数、および文字列に対して機能します。日付と整数の場合、スクリプト言語を使用して、希望する方法で出力できます(例:ゼロ詰め、yyyy-mm-dd形式)。

13
Pake Beet