Jquery datatable отключить сортировку в определенной строке

Как отключить сортировку в определенной строке/столбце в jquery datatable с помощью класса?

здесь моя таблица образцов;

    <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>

script;

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

выше код работает, но если я перейду к следующему столбцу, у которого сортировка его показывает снова стрелку. хотя он не доступен для кликов; (

Как отключить сортировку с помощью класса, а не использовать/перерисовать таблицу.

Ответ 1

Вы можете отключить сортировку, используя класс в определении. Просто добавьте этот код в инициализацию datatable:

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

Ответ 2

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

Это должно сделать это.;)

Ответ 3

попробуйте следующий ответ .it работает для меня.

<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

Ответ 4

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

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

Ответ 5

Единственное решение: Сначала добавьте class="sorting_disabled" в любой <th>, который вы хотите отключить сортировку, а затем добавьте этот код в инициализацию datatable:

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

Ответ 6

Надеюсь, что ниже код работает в вашем случае.

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

Вам нужно отключить сортировку через "bSortable" для этого конкретного столбца.

Ответ 7

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

Ответ 8

Я пришел с почти таким же решением, как в вопросе, но я использовал "fnHeaderCallback". Насколько я понял, он вызывается после повторного отображения заголовка, поэтому больше не стоит беспокоиться о классе сортировки, который появляется снова после нажатия столбца рядом с целевым столбцом.

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

Дополнительная документация о обратных вызовах: http://datatables.net/usage/callbacks

Ответ 9

этот код работал для меня в реакции.

в созданной строке я добавил класс с фиксированной строкой к строке, которую я хотел оставить фиксированной и не сортируемой, и я сделал обратный вызов, спрятал строку, а затем добавил ее к самой таблице.

Надеюсь, что это работает для вас:

$(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");
        }     
    });  
}

Ответ 10

Как сказано в документации Datatables:

Начиная с 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 был первоначально выпущен 18 апреля 2017 года.

Ответ 11

Без использования класса вы можете выполнить следующие действия:

  1. Удалите строку, которая должна остаться несортированной, из тела таблицы.
  2. Включите строку, которая будет добавлена в нижний колонтитул таблицы, если это последняя строка.