@cloudz

Как добавить кастомную сортировку в datatables.js?

На странице таблица формируется на бекенде (чекбоксами указываются отображаемые колонки).
По классу, на таблицу навешиваются сортировки datatables.
(function(){
        var tables = document.querySelectorAll('.grid-view .table-sortable');

        tables.forEach(function (table) {
            var dataRows = table.querySelectorAll('tbody tr');
            // если данных нет, то не вкллючаем сортировку
            if (dataRows.length > 1) {
                    $('table').dataTable({
                        paginate: false,
                        searching: false,
                        info: false,
                        ordering: true,
                        order: [],
                        columnDefs: [
                            {
                                targets: 'no-sort', //отменяем сортировку у столбцов с этим классом
                                orderable: false,
                            },
                        ],
                    });
                }
            }
        });
    })();


Как добавить кастомную сортировку к определенному столбцу таблицы? сейчас некорректно сортируется таблица
€111 < €2 461 < €26

а должно быть
€26 < €111 < €2 461

как правильно дополнить функционал?
  • Вопрос задан
  • 583 просмотра
Решения вопроса 1
Stalker_RED
@Stalker_RED
Сейчас у вас эта колонка сортируется как строка текста. Исправляется так:

columns: [
                {title: "id", type: 'num'}, // магия здесь!
                {title: "Имя"},
                {title: "email"},
                {title: "Телефон"},
            ],


При этом числа не должны содержать пробелов, а значок € должен добавляться только для отображения.

Ну или писать свою функцию sort (искать готовую?) типа как здесь
www.datatables.net/plug-ins/sorting
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
iiiBird
@iiiBird
Пока ты спишь - твой конкурент совершенствуется
К примеру есть атрибут "data-order" https://datatables.net/manual/data/orthogonal-data
Ответ написан
dollar
@dollar
Нужно привести все числа (в строковом формате) к единой длине, добавив пробелы.
€   26
€  111
€2 461

Это самый простой, но не самый правильный способ.

А по-хорошему сортировка должна быть умной. Для этого сортировке обычно скармливается функция сравнения вида cmp(a,b) в которой и производится сравнение двух элементов. Там и должна находиться вся магия, а именно - приведение цен к числам и сравнение уже самих чисел. Смотрите документацию к datatables.js, изучайте исходник. Возможно, такой возможности из коробки там вообще нет, тогда нужно допиливать или использовать другое решение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы