使用复选框对列进行排序

时间:2017-12-19 20:10:50

标签: javascript jquery datatables

我有一个表,我正在使用jQuery Datatable for。

var myTable = $("#My-Table").DataTable({
    "order": [2, "asc"],
    "aoColumnDefs": [
        { "bSortable": false, "aTargets": [3] },
        { "bSearchable": false, "aTargets": [2, 3] }
    ]
});

现在,我尝试执行排序的列是一个包含复选框的列,因此在页面加载时,我正在为该td元素设置数据属性,然后按该属性排序。该属性可以是01

@(if item.Active)
{
    <td class="active-td" data-order="0">
        @Html.DisplayFor(modelItem => item.Active)
    </td>
}
else
{
    <td class="active-td" data-order="1">
        @Html.DisplayFor(modelItem => item.Active)
    </td>
}

现在,用户可以停用或激活记录..当他们这样做时,我正在适当地更改data-order ...但是当我调用draw时,它并没有放置包含未选中的行底部的td元素和顶部包含已检查td元素的行,就像在页面加载时一样。

这是我在用户想要停用时的jQuery。

var td = row.children('td.active-td').attr("data-order", 1);  // changing td data attribute accordingly

myTable.cell(myTable.row(row), 2, {order: 'current'})
    .data("<input disabled='disabled' class='check-box' type='checkbox' />")
    .draw();

.draw()不会像在页面加载时那样重新排序表。

我如何做到这一点?

这是我拒绝某人时的样子:

enter image description here

我想要对该行进行排序,以便选中的复选框位于顶部,而未选中则位于底部。

更新

<script src="https://cdn.datatables.net/plug-ins/1.10.16/sorting/custom-data-source/dom-checkbox.js"></script>

var myTable = $("#My-Table").DataTable({
    "columnDefs":[
    {
        "targets": 2,
        "orderDataType": "dom-checkbox"
    }],
    "aoColumnDefs": [
        { "bSortable": false, "aTargets": [3] },
        { "bSearchable": false, "aTargets": [2, 3] }
    ]
});

1 个答案:

答案 0 :(得分:2)

避免使用data-属性来排序动态数据,它们仅适用于静态数据。

使用dom-checkbox插件,允许根据列中复选框的选中状态进行排序。

包含相应的插件JS文件,并对包含复选框的列使用orderDataType选项。

例如:

var myTable = $("#My-Table").DataTable({
    // ... skipped ...
    "columnDefs": [
       {
          "targets": 0, 
          "orderDataType": "dom-checkbox"
       }
    ]
});

请参阅this example以获取代码和演示。