Jquery DataTable 在运行时更新 `data-sort` 属性不影响排序

问题描述 投票:0回答:1

我有一个数据表,第一个 td 中有复选框
有些正在检查,有些则未从数据库中检查
默认情况下它不会对选中/未选中进行排序,所以我还添加了

data-sort
属性
现在排序按照页面加载时的数据排序值进行工作

但我希望当复选框更改时,数据排序也应该更改,以便正确排序。我在下面做了它正在 dom 中更改

data-sort
,但我认为不是在数据表中。

var dt3;
$(function(){
   dt3 = $('.dt3').DataTable();

   $('body').on('change','input.chkV1',function(){
        var sortVal = $(this).is(':checked')?1:0;
        // $(this).parents('td').attr('data-sort',sortVal);
        // $(this).parents('td').data('sort',sortVal);
        $(this).parents('td').data('sort',sortVal).attr('data-sort',sortVal);
         
        dt3.draw();
    });
 });

我认为

dt3.draw();
只更新单元格数据而不是属性

jquery sorting datatable custom-data-attribute
1个回答
0
投票

实际上在数据表文档中你可以找到解决方案,但我已经为你做了一个。但如果您还想查看[此处][1]链接。

我已经制作了一个样本供您查看所有细节。只需向 DataTables 扩展添加一个新的排序方法即可。

这是一个相当简单的示例,但您不仅限于使用表单输入元素,您可以使用任何内容并自定义 DOM 查询以适合自己。

DataTable.ext.order['dom-checkbox'] = function (settings, col) {
    return this.api()
        .column(col, { order: 'index' })
        .nodes()
        .map(function (td, i) {
            return $('input', td).prop('checked') ? '1' : '0';
        });
};

var table = $('#table').DataTable({
    columns: [
        { orderDataType: 'dom-checkbox' },
                { orderDataType: 'dom-text', type: 'string' },
                { orderDataType: 'dom-text', type: 'string' },
                { orderDataType: 'dom-text', type: 'string' },
                { orderDataType: 'dom-text', type: 'string' },
                { orderDataType: 'dom-text', type: 'string' },
                { orderDataType: 'dom-text', type: 'string' },
    ]
});
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>DataTable Checkbox Sorting</title>
    <link href="https://cdn.datatables.net/v/dt/dt-1.13.10/datatables.min.css" rel="stylesheet"/>
  </head>
  <body>
  <table id="table" class="display" style="width:100%">
        <thead>
            <tr>
                <th>Checked</th>
                <th>Name</th>
                <th>Position</th>
                <th>Office</th>
                <th>Age</th>
                <th>Start date</th>
                <th>Salary</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><input type="checkbox" value="5"></td>
                <td>Tiger Nixon</td>
                <td>System Architect</td>
                <td>Edinburgh</td>
                <td>61</td>
                <td>2011-04-25</td>
                <td>$320,800</td>
            </tr>
            <tr>
                <td><input type="checkbox" value="1"></td>
                <td>Garrett Winters</td>
                <td>Accountant</td>
                <td>Tokyo</td>
                <td>63</td>
                <td>2011-07-25</td>
                <td>$170,750</td>
            </tr>
            <tr>
                <td><input type="checkbox" value="2"></td>
                <td>Ashton Cox</td>
                <td>Junior Technical Author</td>
                <td>San Francisco</td>
                <td>66</td>
                <td>2009-01-12</td>
                <td>$86,000</td>
            </tr>
            <tr>
                <td><input type="checkbox" value="6"></td>
                <td>Cedric Kelly</td>
                <td>Senior Javascript Developer</td>
                <td>Edinburgh</td>
                <td>22</td>
                <td>2012-03-29</td>
                <td>$433,060</td>
            </tr>
        </tbody>
    </table>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/v/dt/dt-1.13.10/datatables.min.js"></script>
  </body>
</html>

© www.soinside.com 2019 - 2024. All rights reserved.