jquery datatable禁用特定行中的排序

时间:2012-06-13 08:53:02

标签: javascript jquery datatable

如何使用类禁用jquery数据表中特定行/列的排序?

这是我的样本表;

    <table>
    <thead>
    <tr>
    <th class="sorting_disabled">Title1</th>
    <th class="">Title2</th>
    <th class="sorting_disabled">Title3</th>
    </tr>
    </thead>
    <tbody>
    <tr><td>Tag 1</td><td>Date 1</td><td>Date 2</td></tr>
    <tr><td>Tag 2</td><td>Date 2</td><td>Date 2</td></tr>
    <tr><td>Tag 3</td><td>Date 3</td><td>Date 3</td></tr>
    <tr><td>Tag 4</td><td>Date 4</td><td>Date 4</td></tr>
    <tr><td>Tag 5</td><td>Date 5</td><td>Date 5</td></tr>
....
    </tbody>
    </table>

脚本;

$('.sortable thead tr th.sorting_disabled').livequery(function() {
       $(this).removeClass('sorting');
       $(this).unbind('click');
    });

上面的代码有效,但如果我点击下一列进行排序,它会再次显示一个箭头。虽然它不可点击;(

如何通过使用类而不使用/重绘表来禁用排序。

12 个答案:

答案 0 :(得分:9)

您可以使用定义中的类禁用排序。 只需将此代码添加到数据表初始化:

// Disable sorting on the sorting_disabled class
"aoColumnDefs" : [ {
    "bSortable" : false,
    "aTargets" : [ "sorting_disabled" ]
} ]

答案 1 :(得分:3)

$('#example').dataTable( {
  "aoColumnDefs": [
      { 'bSortable': false, 'aTargets': [ 1 ] }
   ]});

应该这样做..;)

答案 2 :(得分:2)

尝试以下答案。对我有用。

<table class="tablesorter" id="tmp">
<thead>
    <tr>
        <th>Area</th>
        <th>Total Visitors</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td>Javascript</td>
        <td>15</td>
    </tr>
    <tr>
        <td>PHP</td>
        <td>3</td>
    </tr>
    <tr>
        <td>HTML5</td>
        <td>32</td>
    </tr>
    <tr>
        <td>CSS</td>
        <td>14</td>
    </tr>
    <tr>
        <td>XML</td>
        <td>54</td>
    </tr>
</tbody>
<tfoot>
    <tr class="no-sort">
        <td><strong>Total</strong></td>
        <td><strong>118</strong></td>
    </tr>
</tfoot>

来源:http://blog.adrianlawley.com/tablesorter-jquery-how-to-exclude-rows

答案 3 :(得分:2)

<th class="sorting_disabled">&nbsp;</th>

$(document).ready(function () {
    $('#yourDataTableDivID').dataTable({
        "aoColumnDefs": [
           {
               "bSortable": false,
               "aTargets": ["sorting_disabled"]
           }
        ]
    });
});

答案 4 :(得分:1)

唯一的解决方案: 首先将class="sorting_disabled"添加到要禁用排序的任何<th>,然后将此代码添加到数据表初始化中:

        // Disable sorting on the sorting_disabled class
        "aoColumnDefs" : [ {
            "bSortable" : false,
            "aTargets" : [ "sorting_disabled" ]
        } ],
        "order": [
            [1, 'asc']
        ],

答案 5 :(得分:0)

我希望下面的代码适用于您的情况。

        $("#dataTable").dataTable({
            "aoColumns": [{"bSortable": false}, null,{"bSortable": false}]
        });

您需要通过“bSortable”禁用该特定列的排序。

答案 6 :(得分:0)

$(document).ready(function() {
    $('#example').dataTable( {
        "aoColumns": [
            { "bSortable": false },
            null,
            { "bSortable": false }
        ]
    });
});

答案 7 :(得分:0)

我带来了几乎相同的解决方案,但是我使用了“fnHeaderCallback”。据我了解,它会在每个标题重新显示后调用,因此不再担心在单击目标列旁边的列后再次出现的“排序”类。

$('.datatable').dataTable({
  "fnHeaderCallback": function() {
    return $('th.sorting.sorting_disabled').removeClass("sorting").unbind("click");
  }
});

有关回调的其他文档:http://datatables.net/usage/callbacks

答案 8 :(得分:0)

此代码对我有效。

在创建的行中,我向该行添加了固定行类,以使其保持不变且不可排序,并且我回调调用隐藏了该行,然后将其附加到表本身。

希望这对您有用:

$(this.refs.main).DataTable({
        dom: '<"data-table-wrapper"t>',
        data: data,
        language: {
            "emptyTable": "Loading ...",

        },
        columns,
        ordering: true,
        order: [0,'asc'],
        destory:true,
        bFilter: true,
        fixedHeader: {
            header: true
        },
        iDisplayLength: 100,
        scrollY: '79vh',
        ScrollX: '100%',
        scrollCollapse: true,
        "drawCallback": function( settings ) {
            var dataTableId = $("#To_Scroll_List").find(".dataTables_scrollBody table").attr("id");
            $("..fixed-row").css('display','none');
            $("#"+dataTableId+"_wrapper table").find('tbody tr:last').after($('.fixed-row'));
            $(".fixed-row").show();
        },
        createdRow: function (row, data, index) {
                if(data.UnitsPerLine == 999){
                    $(row).addClass('fixed-row');
                } 
        },
        initComplete: function (settings, json) {

           $("#To_Scroll_List").find(".dataTables_scrollBodytable").attr("id");
            $("#"+dataTableId+" thead tr").remove();



            });

            DatatableSearch(dataTableId+"_wrapper table", "AverageUnitsPerLineReport");
        }     
    });  
}

答案 9 :(得分:0)

Datatables documentation中所述:

  

从DataTables 1.10.5开始,现在可以使用HTML5 data- *属性定义初始化选项。属性名称由DataTables读取,并可能与标准Javascript初始化选项(以data- *属性优先)结合使用。

示例:

<thead>
    <tr>
        <th>Name</th>
        <th>Position</th>
        <th>Office</th>
        <th>Age</th>
        <th data-orderable="false">Start date</th>
        <th>Salary</th>
    </tr>
</thead>

我强烈建议使用此方法,因为它比其他方法更清洁。 DataTables 1.10.15最初于2017年4月18日发布。

答案 10 :(得分:0)

不使用类,您可以按照以下步骤操作:

  1. 从表格主体中删除必须保持未排序状态的行。
  2. 如果要添加的行是最后一行,则将其添加到表的页脚中。

答案 11 :(得分:0)

我做到了,包括了drawCallback中的以下代码:

drawCallback: function(settings) {
    let td = $("td:contains('TOTAL')");
    if (td.length) {
        let row = td.closest('tr');
        let clonedRow = row.clone();
        row.remove();
        $('table tbody').append(clonedRow);
    }
}