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

时间:2016-04-28 10:17:49

标签: javascript datatables datatables-1.10

我试图理解Datatables中的自定义排序机制。我想要做的是根据列的值和其他列(包含一个组)的值对列进行排序以进行分组排序。

要做到这一点,我来到了整个插件:https://datatables.net/plug-ins/sorting/

就像一个例子(可能是另一个例子),我看了一下"反..."插入。为了实现它,我补充道:

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. 有趣的是&#34; pre&#34;每次单击表标题(并使用表)时,都会打印到控制台。我期待&#34; asc&#34;和&#34; desc&#34;也可以打印(按照交替顺序)但没有打印,为什么?

  2. 这是获得所需分组排序结果的正确方法吗?还是我需要定义自己的&#34; orderDataType&#34;达到这个目标?

  3. 修改

    只是为了让事情更清楚: 我们假设我有一个表格,其中包含关于&#34;部门&#34;的信息/列。和&#34;地板&#34;在排序&#34; floor&#34;我希望按每个部门的楼层排序

    排序前

    |部门|地板|

    | IT | 2 |

    | IT | 1 |

    |销售| 1 |

    |销售| 2 |

    点击标题后(&#34; floor&#34; - &gt; asc)

    | IT | 1 |

    | IT | 2 |

    |销售| 1 |

    |销售| 2 |

    再次点击(desc)

    | IT | 2 |

    | IT | 1 |

    |销售| 2 |

    |销售| 1 |

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

1 个答案:

答案 0 :(得分:1)

当您尝试对数据进行分组排序时,我建议您使用数据表&#34;或对数数据&#34;与HTML5 data- * attributes

结合使用

正如您可以在此处阅读(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 } ] }添加到tabledefinition将使排序更加human