Отключить сортировку для определенного столбца в jQuery DataTables


156

Я использую плагин jQuery DataTables для сортировки полей таблицы. У меня вопрос: как отключить сортировку для определенного столбца? Я попытался с помощью следующего кода, но он не работал:

"aoColumns": [
  { "bSearchable": false },
  null
]   

Я также попробовал следующий код:

"aoColumnDefs": [
  {
    "bSearchable": false,
    "aTargets": [ 1 ]
  }
]

но это все еще не дало желаемых результатов.


1
Я отредактировал свой ответ, выбрав опцию, в которой вы можете установить столбцы отключения в своем определении TH.
Пауло Фидальго

Отключить кнопку с помощью CSS. проверить эту страницу. datatables.net/forums/discussion/21164/…
Юджин Джозеф,

Вы также можете посмотреть cbabhusal.wordpress.com/2015/05/20/…
Иллюзионист

Ответы:


176

Это то, что вы ищете:

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

3
это сработало для меня. Если вы хотите отсортировать первый столбец, «aTargets»: [-1], для второго «aTargets»: [1], для третьего «aTargets»: [2] и так далее.
Lasang

5
Вы можете просто сделать «aTargets»: [1, 2]
Adrien Be

2
@Lasang - Вы действительно имели в виду [-1], то [1], [2]и т.д.? Что -1значит? Не начинается ли индексация для столбцов 1для dataTables?
Дэн Ниссенбаум,

1
-1индекс, считающий с конца таблицы. ( -1последний столбец таблицы)
Рами Наср

1
Начиная с DataTables 1.10.5, теперь можно определять параметры инициализации, используя атрибуты data- * HTML5. См stackoverflow.com/a/32281113/1430996
Jeromy французского

87

Начиная с DataTables 1.10.5, теперь можно определять параметры инициализации, используя атрибуты data- * HTML5.

-из примера DataTables - HTML5 data- * атрибуты - параметры таблицы

Таким образом , вы можете использовать data-orderable="false"на thколонки вы не хотите быть сортировкой. Например, второй столбец «Аватар» в таблице ниже не будет сортироваться:

<table id="example" class="display" width="100%" data-page-length="25">
    <thead>
        <tr>
            <th>Name</th>
            <th data-orderable="false">Avatar</th>
            <th>Start date</th>
            <th>Salary</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Tiger Nixon</td>
            <td><img src="https://www.gravatar.com/avatar/8edcff60cdcca2ad650758fa524d4990?s=64&amp;d=identicon&amp;r=PG" alt="" style="width: 64px; height: 64px; visibility: visible;"></td>
            <td>2011/04/25</td>
            <td>$320,800</td>
        </tr>
        <tr>
            <td>Garrett Winters</td>
            <td><img src="https://www.gravatar.com/avatar/98fe9834dcca2ad650758fa524d4990?s=64&amp;d=identicon&amp;r=PG" alt="" style="width: 64px; height: 64px; visibility: visible;"></td>
            <td>2011/07/25</td>
            <td>$170,750</td>
        </tr>
        ...[ETC]...
    </tbody>
</table>

Смотрите рабочий пример на https://jsfiddle.net/jhfrench/6yxvxt7L/ .


9
ИМО, это лучший ответ здесь, самый простой и самый элегантный подход
Хамман Сэмюэль

2
Это отключает функцию сортировки, но я обнаружил (в 1.10.12), что столбец по-прежнему сортируется по умолчанию при инициализации объекта DataTable, который стилизует столбец с помощью восходящего символа сортировки. Если вы не хотите этого, вы можете инициализировать таблицу данных без сортировки следующим образом: $ ('# example'). DataTable ({'order': []});
Брайан Меррелл

@BrianMerrell Wellllllll ... посмотрите на это! jsfiddle.net/ja0ty8xr Вы должны открыть проблему GitHub для такого поведения. :)
Джером Френч

64

Чтобы отключить сортировку первого столбца, попробуйте следующий код в datatables jquery. Ноль представляет здесь возможность сортировки.

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

Отключить сортировку по столбцу в jQuery Datatables


@Paulraj Ссылка не работает, не могли бы вы изменить ее?
Тауфике

1
Начиная с DataTables 1.10.5, теперь можно определять параметры инициализации, используя атрибуты data- * HTML5. См stackoverflow.com/a/32281113/1430996
Jeromy французского

60

Использование Datatables 1.9.4 Я отключил сортировку для первого столбца с этим кодом:

/* Table initialisation */
$(document).ready(function() {
    $('#rules').dataTable({
        "sDom" : "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
        "sPaginationType" : "bootstrap",
        "oLanguage" : {
            "sLengthMenu" : "_MENU_ records per page"
        },
        // Disable sorting on the first column
        "aoColumnDefs" : [ {
            'bSortable' : false,
            'aTargets' : [ 0 ]
        } ]
    });
});

РЕДАКТИРОВАТЬ:

Вы можете отключить даже с помощью no-sortкласса на вашем <th>,

и используйте этот код инициализации:

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

РЕДАКТИРОВАТЬ 2

В этом примере я использую Datables с Bootstrap, следуя старому сообщению в блоге. Теперь есть одна ссылка с обновленным материалом о стилизации Datatables с помощью начальной загрузки .


@larrylampco Я обновил пост с обновленными ссылками.
Пауло Фидальго

Спасибо .. как насчет потери CSS, когда мы применяем сортировку
Shanker Paudel

1
Начиная с DataTables 1.10.5, теперь можно определять параметры инициализации, используя атрибуты data- * HTML5. См.
Stackoverflow.com/a/32281113/1430996

27

Я просто добавляю в thead td пользовательский атрибут и управляю сортировкой, автоматически проверяя значение attr.

Таким образом, HTML-код будет

<table class="datatables" cellspacing="0px" >

    <thead>
        <tr>
            <td data-bSortable="true">Requirements</td>
            <td>Test Cases</td>
            <td data-bSortable="true">Automated</td>
            <td>Created On</td>
            <td>Automated Status</td>
            <td>Tags</td>
            <td>Action</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>

И JavaScript для инициализации таблиц данных будет (он будет динамически получать информацию сортировки из самой таблицы;)

$('.datatables').each(function(){
    var bFilter = true;
    if($(this).hasClass('nofilter')){
        bFilter = false;
    }
    var columnSort = new Array; 
    $(this).find('thead tr td').each(function(){
        if($(this).attr('data-bSortable') == 'true') {
            columnSort.push({ "bSortable": true });
        } else {
            columnSort.push({ "bSortable": false });
        }
    });
    $(this).dataTable({
        "sPaginationType": "full_numbers",
        "bFilter": bFilter,
        "fnDrawCallback": function( oSettings ) {
        },
        "aoColumns": columnSort
    });
});

3
Вы должны использовать data-bSortableвместо bSortable. bSortableнедопустимый атрибут HTML.
Джеймс Доннелли

Начиная с DataTables 1.10.5, теперь можно определять параметры инициализации, используя атрибуты data- * HTML5. См.
Stackoverflow.com/a/32281113/1430996

15

columnDefsсейчас принимает класс. Я бы сказал, что это предпочтительный метод, если вы хотите указать столбцы для отключения в вашей разметке:

<table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th class="datatable-nosort">Actions</th>
        </tr>
    </thead>
    ...
</table>

Тогда в вашем JS:

$("table").DataTable({
    columnDefs: [{
        targets: "datatable-nosort",
        orderable: false
    }]
});

10

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

 $('#tableId').dataTable({           
            "columns": [
                { "data": "id"},
                { "data": "sampleSortableColumn" },
                { "data": "otherSortableColumn" },
                { "data": "unsortableColumn", "orderable": false}
           ]
});

Так что все, что вам нужно сделать, это добавить "orderable": false в столбец, который вы не хотите сортировать.


6
$("#example").dataTable(
  {
    "aoColumnDefs": [{
      "bSortable": false, 
      "aTargets": [0, 1, 2, 3, 4, 5]
    }]
  }
);

Ответ Бхавеша умный, но излишний. Чтобы отключить сортировку, просто используйте ответ abhinav. Отключив сортировку по первому столбцу, добавьте цель столбца в опцию aoColumnDefs:"bSortable": false, "aTargets": [0]
Мэтью

5

Для отключения сортировки по одному столбцу попробуйте этот пример:

<script type="text/javascript">                         
    $(document).ready(function() 
    {
        $("#example").dataTable({
           "aoColumnDefs": [
              { 'bSortable': false, 'aTargets': [ 0 ] }
           ]
        });
    });                                         
</script>

Для нескольких столбцов попробуйте этот пример: вам просто нужно добавить номер столбца. По умолчанию начинается с 0

<script type="text/javascript">                         
    $(document).ready(function() 
    {
        $("#example").dataTable({
           "aoColumnDefs": [
              { 'bSortable': false, 'aTargets': [ 0,1,2,4,5,6] }
           ]
        });
    });                                         
</script>  

Вот только Column 3работает


5

Начиная с 1.10.5 , просто включите

'orderable: false'

в columnDefs и нацелить ваш столбец с

'target: [0,1]'

Таблица должна понравиться как:

var table = $('#data-tables').DataTable({
    columnDefs: [{
        targets: [0],
        orderable: false
    }]
});

5

Если для orderableсвойства FIRST столбца задано значение false, необходимо также установить orderстолбец по умолчанию, иначе он не будет работать, поскольку первый столбец является столбцом порядка по умолчанию. Пример ниже отключает сортировку по первому столбцу, но устанавливает второй столбец в качестве столбца порядка по умолчанию (помните, что индексы dataTables основаны на нуле).

$('#example').dataTable( {
  "order": [[1, 'asc']],
  "columnDefs": [
    { "orderable": false, "targets": 0 }
  ]
} );

Это ответ, который работал для меня с 17 июля 2020 года
Брайан

3
"aoColumnDefs" : [   
{
  'bSortable' : false,  
  'aTargets' : [ 0 ]
}]

Вот 0индекс столбца. Если вы хотите, чтобы несколько столбцов не сортировались, укажите значения индекса столбца, разделенныеcomma(,)


Можно ли отключить сортировку для всех столбцов?
Фидель Кастро

Да, возможно, вы можете посетить эту ссылку, чтобы узнать cbabhusal.wordpress.com/2015/08/18/…
illusionist

3

Чтобы обновить ответ Bhavish (который я думаю, для более старой версии DataTables и не работал для меня). Я думаю, что они изменили имя атрибута. Попробуй это:

<thead>
    <tr>
        <td data-sortable="false">Requirements</td>
        <td data-sortable="false">Automated</td>
        <td>Created On</td>
    </tr>
</thead>
<tbody>
    <tr>
        <td>

Это кажется хорошим подходом ... если это сработало, но это не для меня. Это задокументировано?
AllInOne

1
@AllInOne: да, для data-orderable... см stackoverflow.com/a/32281113/1430996 . data-sortableтакже работает, но я не могу найти, где это задокументировано.
Джером Френч

гораздо лучшее решение
Вашингтон Морайс

2

Используя класс:

<table  class="table table-datatable table-bordered" id="tableID">
    <thead>
        <tr>
            <th class="nosort"><input type="checkbox" id="checkAllreInvitation" /></th>
            <th class="sort-alpha">Employee name</th>
            <th class="sort-alpha">Send Date</th>
            <th class="sort-alpha">Sender</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><input type="checkbox" name="userUid[]" value="{user.uid}" id="checkAllreInvitation" class="checkItemre validate[required]" /></td>
            <td>Alexander Schwartz</td>
            <td>27.12.2015</td>
            <td>dummy@email.com</td>
        </tr>
    </tbody>
</table>
<script type="text/javascript">
    $(document).ready(function() {
        $('#tableID').DataTable({
            'iDisplayLength':100,
            "aaSorting": [[ 0, "asc" ]],
            'aoColumnDefs': [{
                'bSortable': false,
                'aTargets': ['nosort']
            }]
        });
    });
</script>

Теперь вы можете присвоить класс "nosort" <TH>



1

Если вы уже должны скрыть некоторые столбцы, как я скрыть фамилию столбца. Мне просто нужно было объединить fname, lname, поэтому я сделал запрос, но скрыл этот столбец от внешнего интерфейса. Изменения в отключить сортировку в такой ситуации:

    "aoColumnDefs": [
        { 'bSortable': false, 'aTargets': [ 3 ] },
        {
            "targets": [ 4 ],
            "visible": false,
            "searchable": true
        }
    ],

Обратите внимание, что у меня была функция скрытия здесь

    "columnDefs": [
            {
                "targets": [ 4 ],
                "visible": false,
                "searchable": true
            }
        ],

Затем я слил это в "aoColumnDefs"


1
  1. Используйте следующий код, чтобы отключить порядок в первом столбце:

    $('#example').dataTable( {
      "columnDefs": [
        { "orderable": false, "targets": 0 }
      ]
    } );
  2. Чтобы отключить порядок по умолчанию, вы также можете использовать:

    $('#example').dataTable( {
         "ordering": false, 
    } );

1

Вы можете напрямую использовать метод .notsortable () для столбца

 vm.dtOpt_product = DTOptionsBuilder.newOptions()
                .withOption('responsive', true)
        vm.dtOpt_product.withPaginationType('full_numbers');
        vm.dtOpt_product.withColumnFilter({
            aoColumns: [{
                    type: 'null'
                }, {
                    type: 'text',
                    bRegex: true,
                    bSmart: true
                }, {
                    type: 'text',
                    bRegex: true,
                    bSmart: true
                }, {
                    type: 'text',
                    bRegex: true,
                    bSmart: true
                }, {
                    type: 'select',
                    bRegex: false,
                    bSmart: true,
                    values: vm.dtProductTypes
                }]

        });

        vm.dtColDefs_product = [
            DTColumnDefBuilder.newColumnDef(0), DTColumnDefBuilder.newColumnDef(1),
            DTColumnDefBuilder.newColumnDef(2), DTColumnDefBuilder.newColumnDef(3).withClass('none'),
            DTColumnDefBuilder.newColumnDef(4), DTColumnDefBuilder.newColumnDef(5).notSortable()
        ];

1

Есть два способа, один определяется в html при определении заголовков таблицы

<thead>
  <th data-orderable="false"></th>
</thead>

Другой способ - использовать javascript, например, у вас есть таблица.

<table id="datatables">
    <thead>
        <tr>
            <th class="testid input">test id</th>
            <th class="testname input">test name</th>
    </thead>
</table>

затем,

$(document).ready(function() {
    $('#datatables').DataTable( {
        "columnDefs": [ {
            "targets": [ 0], // 0 indicates the first column you define in <thead>
            "searchable": false
        }
        , {
            // you can also use name to get the target column
            "targets": 'testid', // name is the class you define in <th>
            "searchable": false
        }
        ]
    }
    );
}
);

0

Вы также можете использовать отрицательный индекс, как это:

$('.datatable').dataTable({
    "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
    "sPaginationType": "bootstrap",
    "aoColumnDefs": [
        { 'bSortable': false, 'aTargets': [ -1 ] }
    ]
});

0

Код будет выглядеть так:

$(".data-cash").each(function (index) {
  $(this).dataTable({
    "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
    "sPaginationType": "bootstrap",
    "oLanguage": {
      "sLengthMenu": "_MENU_ records per page",
      "oPaginate": {
        "sPrevious": "Prev",
        "sNext": "Next"
      }
    },
    "bSort": false,
    "aaSorting": []
  });
});

0

Вот ответ!

targets номер столбца, начинается с 0

$('#example').dataTable( {
  "columnDefs": [
    { "orderable": false, "targets": 0 }
  ]
} );

-2

установите класс "no-sort" в таблице, затем добавьте css .no-sort {pointer-events: none! важный; курсор: по умолчанию! важный; фоновое изображение: нет! важный; } при этом он будет скрывать событие обновления и отключения стрелки в голове.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.