Jquery Sortable table,只会对一个日期列进行排序

Posted

技术标签:

【中文标题】Jquery Sortable table,只会对一个日期列进行排序【英文标题】:Jquery Sortable table, will only sort one date column 【发布时间】:2019-11-04 05:07:22 【问题描述】:

我们有一个 4 列的表格 2 列是日期,但只有一列可以正确排序(dd/mm/yyyy)。另一个似乎只是按数字排序

2019 年 1 月 5 日

2019 年 1 月 6 日

2019 年 3 月 5 日

2019 年 4 月 6 日

06/05/2019

2019 年 6 月 6 日

08/05/2019

2019 年 9 月 5 日

完整代码请见 Jsbin https://output.jsbin.com/wukixox/ 或 https://codepen.io/Chazlie/pen/GbWZWa

<div class="tracking-table" id="tracking-table-style">
 <div id="test-table-2">

<table id ="table-tracking" class="container sortable">
  <thead>
    <tr>


 <th class="complete"> complete</th>
 <th class="process"> process</th>
 <th class="scanned"> scanned</th>
 <th class="goneaway"> despatch date</th>

   </tr>
  </thead>
  <tbody>   
        <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">31/05/2019</td>
<td class="goneaway">06/06/2019</td>
  </tr> 
    <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">02/05/2019</td>
<td class="goneaway">09/05/2019</td>
 </tr> 
    <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">02/05/2019</td>
<td class="goneaway">09/06/2019</td>
 </tr> 
    <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">02/05/2019</td>
<td class="goneaway">08/05/2019</td>
 </tr> 
    <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">02/05/2019</td>
<td class="goneaway">09/05/2019</td>
 </tr> 
    <tr>

<td class="complete">False</td>
<td class="process">Pattern Matching</td>
<td class="scanned">17/06/2019</td>
<td class="goneaway">27/06/2019</td>
  </tr> 
    <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">25/04/2019</td>
<td class="goneaway">06/05/2019</td>
 </tr> 
    <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">13/06/2019</td>
<td class="goneaway">04/06/2019</td>

 </tr> 
    <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">13/06/2019</td>
<td class="goneaway">03/05/2019</td>
 </tr> 
    <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">29/05/2019</td>
<td class="goneaway">01/05/2019</td>
  </tr> 
    <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">29/05/2019</td>
<td class="goneaway">01/06/2019</td>
 </tr> 
    <tr>

<td class="complete">False</td>
<td class="process">TOP OF FABRIC QUERY</td>
<td class="scanned">11/06/2019</td>
<td class="goneaway">TBA</td>
  </tr> 
    <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">16/05/2019</td>
<td class="goneaway">16/05/2019</td>
  </tr> 
    <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">16/05/2019</td>
<td class="goneaway">17/06/2019</td>
 </tr> 
    <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">16/05/2019</td>
<td class="goneaway">18/05/2019</td>
 </tr> 
    <tr>

<td class="complete">True</td>
<td class="process">DD CARRIER</td>
<td class="scanned">16/05/2019</td>
<td class="goneaway">19/06/2019</td>
  </tr> 

</tbody>
</table> </div></div>

jquery:

  $(document).ready(function() 
    $.fn.dataTable.moment( 'DD/MM/YYYY' );

    $('#table-tracking').DataTable( 
        "bLengthChange": false,
        "pageLength": 25,
    );
 );

这使用了数据表 Jquery 插件

所以 Scanned 列工作正常,Dispatched 没有

可编辑的JSbinhttps://jsbin.com/wukixox/edit?html,js,output

【问题讨论】:

因为 Dispatched 列不只包含日期 &lt;td class="goneaway"&gt;TBA&lt;/td&gt; 经过测试,您是正确的。有可能对此做些什么吗?这是通过 XML 输入的 API 数据,然后我们将其作为表格输出供用户查看。所以列将有待定。如果 TBA 在它忽略的列中,我们能做些什么吗?或任何东西 【参考方案1】:

问题是您的发货日期列中存在非日期格式的字符串数据,因此 datatable 不会将其解析为日期列。

解决方案 1: 您可以将显示的数据和排序算法使用的数据分开。您需要从第 4 列中添加所有 td 的数据属性,该属性应仅包含日期字符串。在您的情况下,您应该在没有日期格式字符串的 td 上写 eg.: 00/00/0000。更多信息:https://datatables.net/manual/data/orthogonal-data

...
<tr>
    ...
    <td data-order="00/00/0000" class="goneaway">TBA</td> //Check the data-order attribute's value
</tr>
<tr>
    ...
    <td data-order="06/06/2019" class="goneaway">06/06/2019</td>
</tr>
...
</tbody>

更好的解决方案如果您编写自己的排序算法。例子: Implementing a custom sSortType and sort function for jQuery dataTables

【讨论】:

以上是关于Jquery Sortable table,只会对一个日期列进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何让 jQuery UI 的 Draggable 和 Sortable 函数在 iPhone 上工作?

JQuery根据Text of Anchor标签创建超链接

jquery-ui-sortable 的拖动事件

jquery Sortable connectWith 两次调用更新方法

jQuery Sortable的自身序列化

element-ui table sortable某列数据后加上单位后排序不正确