@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

как правильно дополнить функционал?
  • Вопрос задан
  • 1719 просмотров
Решения вопроса 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, изучайте исходник. Возможно, такой возможности из коробки там вообще нет, тогда нужно допиливать или использовать другое решение.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы