JQuery DataTables изменить порядок на desc при сортировке
Я использую DataTables для отображения некоторых данных, и он отлично работает, но я хочу настроить его немного и не уверен, как.
то, что я хочу сделать, это когда пользователь нажимает на заголовок столбца, чтобы отсортировать этот столбец, я хочу, чтобы он изначально заказывал нисходящий, а не восходящий. Есть ли способ сделать это?
6 ответов
взгляните на это: DataTables пример управления направлением сортировки
вы можете сделать что-то вроде:
$(document).ready(function() {
$('#example').dataTable( {
"aoColumns": [
{ "asSorting": [ "desc", "asc" ] }, //first sort desc, then asc
]
} );
} );
текущая версия 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" (произвольно выбранное, описательное имя класса).
в ответ на сортировку заготовок последний, вот что я придумал--
(Я просто ненавижу сортировку заготовок!!)
включить эти пользовательские функции сортировки
// 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
]
});
Если кто-то еще, как Дэйв и я, ищет способ установить порядок сортировки по всем столбцам, следующее может сработать для вас. Чтобы изменить порядок сортировки по всем столбцам, я настроил цикл для изменения настроек после создания экземпляра таблицы:
$(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
единственный способ получить ваши пустые Последние будет немного взломать (так как сортировка работает правильно).
вместо того, чтобы возвращать пустые значения с вашего сервера, верните что-то вроде: "[Blank]"
Я не тестировал его, но я уверен, что квадратные скобки будут после буквенно-цифровых кодов. Также квадратные скобки традиционно символизируют то, что еще не было завершено или подтверждено.
это работает для меня:
settings = {
aoColumnDefs: [
{
orderSequence: ["desc", "asc"],
aTargets: ['_all']
}
]};
$('.dataTable').DataTable(settings);