Datatables中列的自定义(组)排序

问题描述:

我想了解Datatables中的自定义排序机制。我想要做的是根据其值和其他列的值(conatining组)来进行排序,以便进行分组排序。Datatables中列的自定义(组)排序

要做到这一点,我就翻过排序插件:https://datatables.net/plug-ins/sorting/

只是作为一个例子(可能是另一个),我有一个看看“反了”插件。为了Actvate(启用)它,我说:

targets = "_all", type = "anti-the" 

columnDefs

和使用

jQuery.extend(jQuery.fn.dataTableExt.oSort, { 
    "anti-the-pre": function (a) { 
     console.log("pre"); 
     return a.replace(/^the /i, ""); 
    }, 

    "anti-the-asc": function (a, b) { 
     console.log("asc"); 
     return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 
    }, 

    "anti-the-desc": function (a, b) { 
     console.log("desc"); 
     return ((a < b) ? 1 : ((a > b) ? -1 : 0)); 
    } 
}); 

该计划是为了适应这三个功能以获得所需的分组排序。

  1. 有趣的是,每当单击表格标题(并使用表格)时,“pre”被打印到控制台。我希望打印“asc”和“desc”(交替排列),但是没有打印,为什么?

  2. 这是获得分组排序所需结果的正确方法,还是我需要定义自己的“orderDataType”来达到此目的?

编辑:

只是为了让事情更清楚一点: 假设我有一个包含有关“部门”和“地板”信息/列的表排序时“地板”我喜欢它d分选前进行排序地板的每一个部门

:|部门|地板

|

| IT | 2 |

| IT | 1 |

|销售| 1 |

|销售| 2 |

点击标题后( “地板” - > ASC)

| IT | 1 |

| IT | 2 |

|销售| 1 |

|销售| 2 |

再次点击(降序)

| IT | 2 |

| IT | 1 |

|销售| 2 |

|销售| 1 |

在我那里北京时间组之间没有混合数据

(此处部门) - >同一部门的行会彼此相邻

+0

如果您显示两列,您的用户可以通过按shift键并单击标题来排列两列。在这种情况下不需要自定义排序。 – DKSan

当你正在尝试做你的数据我的GroupWise的分类将建议您使用数据表格“orthagonal data”结合HTML5数据属性

正如你可以在这里阅读(Datatables Website - Orthagonal Data - HTML5)使用自定义属性data-order应该是你的首选武器。

例如:

你想组departmentfloor但只显示department给用户。本实施例中应显示您所希望的输出

(在姓细胞的floornumber是可视化权排序的辅助,并且可以被去除)

<table id="myTestTable" class="display"> 
    <thead> 
     <tr> 
      <th>Department</th><th>Surname</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td data-order="it 1">IT</td> <td>Daniel (1)</td> 
     </tr> 
     <tr> 
      <td data-order="sales 2">sales</td> <td>Sue (2)</td> 
     </tr> 
     <tr> 
      <td data-order="it 1">IT</td> <td>John (1)</td> 
     </tr> 
     <tr> 
      <td data-order="it 2">IT</td> <td>Mr. Miyagi (2)</td> 
     </tr> 
     <tr> 
      <td data-order="sales 2">sales</td> <td>Mel (2)</td> 
     </tr> 
     <tr> 
      <td data-order="sales 1">sales</td> <td>Marc (1)</td> 
     </tr> 
    </tbody> 
</table> 
<script> 
    $('#myTestTable').dataTable(); 
</script> 

编辑:

在第一分选10楼及以上的例子将是错误的。这将是1,10,2,3,4等,因为数据表将严格分类字符串。

为了解决这个问题,在datatables网站上有一个排序插件natural sorting。包括此代码并将{ columnDefs: [ { type: 'natural' , targets: 0 } ] }添加到表定义将会将排序修复为更多human的方式。

+0

不错的想法,但我想使用点击列类型。即使用您的方法,IT在第11层(数据订单=“it 11”)将在IT位于第2层(“it 2”)之前下单,不是吗? –

+0

是的。在这种情况下,您将不得不合并正方形数据和自定义排序。 – DKSan

+0

任何提示在哪里/如何启动? (顺便说一句,我已经添加了一些更多的信息作为编辑原始问题,使问题更清晰) –