Отключить сортировку для определенного столбца в 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 ] }
       ]
});
wildehahn
источник
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
источник
@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
    }]
});
dtbarne
источник
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>

Ганшям Гохель
источник
2

Это работает для меня для одного столбца

 $('#example').dataTable( {
"aoColumns": [
{ "bSortable": false 
 }]});
Амай Кулкарни
источник
1

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

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

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

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

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

Pratik
источник
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()
        ];
Urvi_204
источник
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 }
  ]
} );
BumbuKhan
источник
-2

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

Рахул
источник