首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据表中列的自定义(组)排序

数据表中列的自定义(组)排序
EN

Stack Overflow用户
提问于 2016-04-28 10:17:48
回答 1查看 1.5K关注 0票数 0

我正在尝试理解Datatables中的自定义排序机制。我要做的是根据列的值对列进行排序,并根据其他列(包含组)的值进行排序,以获得groupwise排序。

为此,我遍历了排序插件:https://datatables.net/plug-ins/sorting/

作为一个例子(可能是另一个例子),我看了一下“反-这个”插件。为了达到目的,我添加了以下内容:

代码语言:javascript
复制
targets = "_all", type = "anti-the"

columnDefs

并使用

代码语言:javascript
复制
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“才能达到此目的?

编辑:

让事情变得更清楚一点:让我们假设我有一个表格,其中包含了关于“部门”和“楼层”的信息/列,在对“楼层”进行排序时,我希望对每个部门的楼层进行排序。

分类前:

部门-楼层

1.信息技术.2

2.信息技术1

4.销售情况1

4.销售情况2

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

2.信息技术1

1.信息技术.2

4.销售情况1

4.销售情况2

再次单击(desc)

1.信息技术.2

2.信息技术1

4.销售情况2

4.销售情况1

在我所拥有的数据中,没有组(这里:部门)之间的混合,相同部门的->行将彼此相邻。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-28 12:01:23

当您试图对您的数据进行groupwise排序时,我建议您结合使用数据对象“正交数据”和HTML5数据-*属性

正如您可以在这里看到的(数据表网站.正交数据. HTML5),使用自定义属性data-order应该是您选择的武器。

例如:

您希望对departmentfloor进行分组,但只向用户显示department。此示例应显示所需的输出。

(姓氏单元格中的地板号码是一个可视化排序的助手,可以删除)

代码语言:javascript
复制
<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等等,因为可数据将严格地对字符串进行排序。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36911677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档