Jquery DataTables меняет порядок на desc при сортировке

Я использую DataTables для отображения некоторых данных, и он отлично работает, но я хочу немного его настроить и не знаю, как это сделать.

Что я хочу сделать, так это то, что когда пользователь щелкает заголовок столбца, чтобы отсортировать этот столбец, я хочу, чтобы он изначально упорядочивался по убыванию, а не по возрастанию. Есть какой-либо способ сделать это?


person John    schedule 16.09.2010    source источник
comment
Обе версии 1.9 и 1.10 имеют схожие способы решения этой проблемы; см. ответ SteD для 1.9 (вот документация asSorting 1.9) и мой ответ ниже для 1.10 сортировка по убыванию по умолчанию для 1 или более (или _all!) столбцов.   -  person veeTrain    schedule 28.04.2015


Ответы (6)


Взгляните на это: пример управления направлением сортировки DataTables

Вы можете сделать что-то вроде:

$(document).ready(function() {
    $('#example').dataTable( {
        "aoColumns": [
            { "asSorting": [ "desc", "asc" ] }, //first sort desc, then asc
        ]
    } );
} );
person SteD    schedule 16.09.2010
comment
Спасибо отлично работает! Знаете ли вы, как при сортировке пустые/пустые поля могут отображаться последними, а не первыми? - person John; 16.09.2010
comment
Спасибо за это. Вы случайно не знаете, был ли добавлен способ установить значение по умолчанию для всей таблицы? Я не смог найти ни одного. - person Dave; 21.07.2012
comment
Похоже, теперь это не работает с v. 1.10.x? Не могу найти подходящее решение. - person Con Antonakos; 13.04.2015
comment
@ConAntonakos, см. мой ответ для решения 1.10 - person veeTrain; 28.04.2015
comment
@Dave, вы можете настроить таргетинг на столбцы _all в версии 1.10 с помощью моего решения. Вы также можете использовать _all в качестве цели в версии 1.9, как показано здесь. См. пример asSorting с использованием aoColumnDefs для указания "desc","asc" и цели _all. - person veeTrain; 28.04.2015

Текущая версия DataTables (1.10) предоставляет следующий способ переключения этого порядка сортировки по умолчанию со свойством orderSequence под columnDefs (или columns, но менее гибко).

Вот документация по orderSequence.

"columnDefs": [
    { "orderSequence": [ "desc", "asc"], "targets": [ 1 ] },
]

Как также упоминается, вы можете заставить столбец сортироваться только при нажатии на DESC или ASC, от чего ваш интерфейс может очень выиграть.

В моем случае мне нужно было, чтобы столбцы сортировались по убыванию при первом щелчке для неопределенного количества столбцов, поэтому я решил переключить пример, чтобы настроить таргетинг на имя заголовка столбца class, а не явно определять каждый столбец как "targets":[1],"targets":[2],...[n] или программно создавать массив индексы столбцов, о которых я заботился.

Вы можете настроить таргетинг на столбцы несколькими способами здесь.

Конечным результатом является определение таблицы следующим образом:

<table><thead><tr>
    <th class='descendFirst'>DESCend when first clicked</th>
    <th>a normally sorted ASC->DESC->... column</th>
    ...
</tr></thead></table>

И таблица данных, уполномоченная как таковая:

$("#table").dataTable({
    "columnDefs": [
        {"orderSequence": ["desc","asc"], "targets":"descendFirst" },
    ]
});

Вуаля! Сначала щелкните сортировку по убыванию во всех столбцах с <th>, отмеченным классом «descendFirst» (произвольно выбранное описательное имя класса).

person veeTrain    schedule 28.04.2015

В ответ на сортировку пробелов в последнюю очередь, вот что я придумал--
(Я просто НЕНАВИЖУ сортировку пробелов в первую очередь!!)

Включить эти специальные функции сортировки

// custom sort functions
jQuery.fn.dataTableExt.oSort['text-blankslast-asc'] = function (x, y) {  
   x = (x == "") ? String.fromCharCode(255) : x;  
   y = (y == "") ? String.fromCharCode(255) : y;  
   return ((x < y) ? -1 : ((x > y) ? 1 : 0));  
};  

jQuery.fn.dataTableExt.oSort['text-blankslast-desc'] = function (x, y) {  
   x = (x == "") ? String.fromCharCode(0) : x;  
   y = (y == "") ? String.fromCharCode(0) : y;  
   return ((x < y) ? 1 : ((x > y) ? -1 : 0));  
};  

Примените теги сортировки к соответствующим столбцам

// init example  
$('#table2').dataTable({  
   "bJQueryUI": true,  
   "aoColumns": [  
      null,  
      { "sType": "text-blankslast" },  
      { "sType": "text-blankslast" },  
      { "sType": "text-blankslast" },  
      null  
   ]  
});  
person ozberg    schedule 01.02.2012
comment
или просто добавьте скрытый текст, чтобы он отображался в соответствующем месте. Бывший. ‹div style=visibility:hidden;opacity:0;›zzzzz‹/div› — хак, но простой в реализации. - person David Hobs; 29.01.2013

Если кто-то еще, как Дэйв и я, ищет способ установить порядок сортировки для всех столбцов, вам может подойти следующее. Чтобы изменить порядок сортировки во всех столбцах, я создал цикл для изменения настроек после создания экземпляра таблицы:

$(document).ready(function() {
    var example_table = $('#example').dataTable();
    $.each(example_table.dataTableSettings[0].aoColumns, function(key, column) {
        column.asSorting = [ "desc", "asc" ];
    } );
} );

Надеюсь, это поможет. Протестировано на jQuery 1.11.0 и DataTables 1.10.0.

person Glen    schedule 07.05.2014

Единственный способ получить ваши пустые последние - это немного взломать (поскольку сортировка работает правильно).

Вместо того, чтобы возвращать пустые значения с вашего сервера, верните что-то вроде: «[Пустой]»

Я не проверял это, но я уверен, что квадратные скобки будут стоять после буквенно-цифровых кодов. Также квадратные скобки традиционно символизируют то, что еще не завершено или не подтверждено.

person Community    schedule 17.11.2011

Это работает для меня:

       settings = {
           aoColumnDefs: [
            {
                orderSequence: ["desc", "asc"],
                aTargets: ['_all']
            }
        ]};

        $('.dataTable').DataTable(settings);
person Richard    schedule 25.01.2017