Ловите
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();