Столбец сортировки/упорядочивания DataTables со специальными символами

Я использую плагин jQuery для DataTables, чтобы добавить сортировку/упорядочение в свою таблицу. Мне пришлось добавить специальный символ * к некоторым числам в столбце. Когда я это сделал, сортировка/упорядочение стали работать неправильно.Как видите, первое значение в ‹code›korteri nr‹/code› равно 1, затем 10 и т. д., но есть 2, 3 и другие, которые находятся ниже  position if scroll Как видите, первое значение korteri nr равно 1, затем 10 и т. д., но есть 2, 3 и другие, которые находятся на более низкой позиции при прокрутке

Я пробовал этот код для достижения правильного порядка, но это не помогает

$.fn.dataTableExt.oSort['custom-sorting-asc'] = function(a,b) {
        a = escapeRegExp(a);
        b = escapeRegExp(b);
        return (a == b) ? 0 : (a > b) ? 1 : -1;
    };
    $.fn.dataTableExt.oSort['custom-sorting-desc'] = function(a,b) {
        a = escapeRegExp(a);
        b = escapeRegExp(b);
        return (a == b) ? 0 : (a > b) ? -1 : 1; //reverse sorting
    };


    function escapeRegExp(string){
        return string.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
    }

    $('.handp-table').DataTable( {
            searching: false,
            paging: false,         
            aoColumns: [
                { "sType": "custom-sorting" }, //custom sorting
                null, //default sorting
                null,
                null,
                null,
                null,
                null
            ]
        } );

person vladja    schedule 23.01.2017    source источник


Ответы (3)


Проблема в том, что datatables интерпретирует значения в этом столбце как строки и сортирует их по алфавиту.

Вы можете попробовать использовать функцию рендеринга в соответствующей колонке:

aoColumns: [
                { fnRender: function(data,type,full){
                       if(type==='sort'){
                           return data;
                       }
                       return data+'*';
                  } 
                }
                null, //default sorting
                null,
                null,
                null,
                null,
                null
            ]

Я предполагаю, что данные, которые вы получаете с сервера, представляют собой простые целые числа. Если это так, то Datatables будет достаточно умным, чтобы преобразовать и использовать целочисленное значение для сортировки, а также использовать целочисленное значение с конкатенированным * (то есть: строкой) для отображения, фильтрации и т. д.

Кстати, если вы используете Datatables 1.10+, я бы посоветовал вам использовать новый синтаксис (более понятный и простой в использовании).

person Sebastianb    schedule 23.01.2017
comment
Я использую DataTables v 1.10.11 . Бывает ситуация, когда я могу использовать счетчик для установки числа для каждого внутреннего цикла, но в зависимости от данных, которые пришли с сервера, я должен добавить * . Итак, теперь это простая конкатенация, например if(true) $counter . '*' . Серверная часть находится на PHP - person vladja; 24.01.2017

Нашел другое решение этой проблемы. Я изменил логику, которая генерировала содержимое столбца. Вместо добавления * к каждому числу, где должен быть этот символ, я добавил класс к этому элементу some_class, а затем использовал CSS pseudo element :after, чтобы добавить * в качестве содержимого. DataTables не считает css, поэтому теперь работает как надо.

person vladja    schedule 26.01.2017

Вот более простой и гибкий способ: вы можете добавить атрибут data-order к каждому тегу td, который затем будет использоваться для заказа. Я дал более подробный ответ здесь: https://stackoverflow.com/a/51225222/8801891

person gibihmruby    schedule 08.07.2018