Задать вопрос
  • Почему в плагине dataTable не работает сортировка с буквой Ё?

    @ingvarzharov
    Программист
    Ловите

    import DataTable from 'datatables.net-bs4';

    export function dataTableRusType(data) {

    const special_letters = {
    А: 'Aa', а: 'aa', Б: 'Ab', б: 'ab', В: 'Ac', в: 'ac', Г: 'Ad', г: 'ad',
    Д: 'Ae', д: 'ae', Е: 'Af', е: 'af', Ё: 'Ag', ё: 'ag', Ж: 'Ah', ж: 'ah',
    З: 'Ai', з: 'ai', И: 'Aj', и: 'aj', Й: 'Ak', й: 'ak', К: 'Al', к: 'al',
    Л: 'Am', л: 'am', М: 'An', м: 'an', Н: 'Ao', н: 'ao', О: 'Ap', о: 'ap',
    П: 'Aq', п: 'aq', Р: 'Ar', р: 'ar', С: 'As', с: 'as', Т: 'At', т: 'at',
    У: 'Au', у: 'au', Ф: 'Av', ф: 'av', Х: 'Aw', х: 'aw', Ц: 'Ax', ц: 'ax',
    Ч: 'Ay', ч: 'ay', Ш: 'Az', ш: 'az', Щ: 'Aza', щ: 'aza', Ъ: 'Azb', ъ: 'azb',
    Ы: 'Azc', ы: 'azc', Ь: 'Azd', ь: 'azd', Э: 'Aze', э: 'aze', Ю: 'Azf', ю: 'azf',
    Я: 'Azg', я: 'azg',
    };

    if (typeof data !== 'string') return data;

    return data.split('').map(char => special_letters[char] || char).join('').toLowerCase();
    }

    DataTable.ext.type.order['rus-pre'] = (data) => dataTableRusType(data); // Для сортировки
    DataTable.ext.type.search['rus'] = (data) => dataTableRusType(data); // Для поиска

    В самой таблице делаем в columnDefs

    {
    targets: 1,
    data: 'user',
    orderable: true,
    width: '230px',
    type: 'rus', // ВАЖНО!!!
    render: (data, type) => {
    // Ваш рендер, где отдает русские символы для поиска
    }
    }

    Для поиска по колонке 1

    this.dataTable.column(1).search(dataTableRusType(value)).draw();
    Ответ написан
    Комментировать