Как использовать Data Table JS для создания интерактивных таблиц
Пройдите тест, узнайте какой профессии подходите
Для кого эта статья:
- разработчики веб-приложений и сайтов
- студенты и начинающие специалисты в области веб-разработки
- специалисты по обработке данных и аналитике
Работа с большими наборами данных на веб-страницах часто превращается в настоящий кошмар для разработчиков. Простая HTML-таблица становится неуправляемой, когда в ней более сотни строк, а пользователи жалуются на отсутствие фильтрации и невозможность найти нужную информацию. Data Table JS решает эти проблемы одним элегантным движением, превращая статичные таблицы в мощные интерактивные инструменты управления данными. Готовы превратить свои скучные таблицы в динамические центры обработки информации с пагинацией, сортировкой и фильтрацией? 🚀
Хотите освоить не только Data Table JS, но и всю экосистему современной веб-разработки? Курс «Веб-разработчик» с нуля от Skypro погружает вас в мир практического программирования, где вы научитесь создавать не просто интерактивные таблицы, а полноценные веб-приложения. За 9 месяцев вы пройдете путь от новичка до профессионала, способного реализовать проекты любой сложности с использованием JavaScript, React и других современных технологий.
Что такое DataTable.js и почему он популярен
DataTable.js — это мощная библиотека JavaScript, которая преобразует стандартные HTML-таблицы в интерактивные структуры данных с богатым набором функций. Библиотека изначально разрабатывалась как плагин для jQuery, но сегодня существуют также варианты для нативного JavaScript и различных фреймворков.
Популярность DataTable объясняется несколькими ключевыми преимуществами:
- Простота внедрения — подключение библиотеки к существующей HTML-таблице занимает буквально пару строк кода
- Богатый функционал — пагинация, сортировка, фильтрация, экспорт данных и многое другое доступно "из коробки"
- Высокая производительность — оптимизированная работа даже с большими объемами данных
- Отзывчивый дизайн — адаптация к различным размерам экрана
- Расширяемость — система плагинов позволяет добавлять новые функции
По данным статистики npm за 2025 год, DataTables загружается более 500 000 раз еженедельно, что подтверждает его статус как стандарта де-факто для создания интерактивных таблиц. Библиотека постоянно совершенствуется, активно поддерживается сообществом и имеет обширную документацию.
Критерий сравнения | DataTable.js | AG Grid | Tabulator |
---|---|---|---|
Базовый размер библиотеки | 88 КБ (минифицированный) | 142 КБ (минифицированный) | 125 КБ (минифицированный) |
Интеграция с jQuery | Нативная | Частичная | Отсутствует |
Порог вхождения | Низкий | Средний | Средний |
Сообщество разработчиков | Очень большое | Большое | Среднее |
Алексей Петров, Senior Frontend Developer
Когда мне поручили модернизировать аналитический портал компании, основная проблема была очевидна — таблицы с тысячами строк данных, в которых пользователи буквально тонули. Клиенты жаловались на невозможность быстро найти нужную информацию и отсутствие фильтрации.
Я рассматривал несколько библиотек, но выбор пал на DataTable.js из-за простоты интеграции и богатого функционала. Внедрение заняло всего день — базовая конфигурация потребовала минимум кода, а результаты превзошли ожидания. Пользователи получили возможность сортировать, фильтровать и экспортировать данные, а количество обращений в техподдержку сократилось на 68% в течение первого месяца.
Самое впечатляющее — производительность системы практически не пострадала, несмотря на обработку больших объемов данных. DataTable.js стал нашим стандартом для всех проектов, где требуется интерактивная работа с табличными данными.

Настройка Data Table JS: базовая конфигурация
Внедрение DataTable.js в ваш проект начинается с правильной настройки библиотеки. Процесс включает в себя несколько простых шагов, которые позволят быстро получить работающую интерактивную таблицу. 🛠️
Шаг 1: Подключение необходимых файлов
В первую очередь необходимо подключить CSS и JavaScript файлы библиотеки. Вы можете использовать CDN или установить библиотеку через npm:
<!-- CSS -->
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.13.7/css/jquery.dataTables.min.css">
<!-- JavaScript -->
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="https://cdn.datatables.net/1.13.7/js/jquery.dataTables.min.js"></script>
Если вы предпочитаете npm:
npm install datatables.net datatables.net-dt
Шаг 2: Подготовка HTML-структуры
Создайте стандартную HTML-таблицу с правильной структурой: thead для заголовков и tbody для данных:
<table id="myTable" class="display">
<thead>
<tr>
<th>Имя</th>
<th>Должность</th>
<th>Офис</th>
<th>Возраст</th>
<th>Дата начала</th>
<th>Зарплата</th>
</tr>
</thead>
<tbody>
<tr>
<td>Тигран Петросян</td>
<td>Системный архитектор</td>
<td>Москва</td>
<td>33</td>
<td>2024/04/25</td>
<td>320,000₽</td>
</tr>
<!-- Другие строки данных -->
</tbody>
</table>
Шаг 3: Инициализация таблицы
Базовая инициализация DataTable требует минимум кода:
$(document).ready(function() {
$('#myTable').DataTable();
});
Однако, реальная мощь библиотеки раскрывается при использовании настроек конфигурации:
$(document).ready(function() {
$('#myTable').DataTable({
pageLength: 25, // Количество строк на странице
lengthMenu: [10, 25, 50, 100], // Доступные варианты
responsive: true, // Адаптивность к экрану
language: {
url: '//cdn.datatables.net/plug-ins/1.13.7/i18n/ru.json'
},
dom: 'Bfrtip', // Расположение элементов интерфейса
buttons: [ // Добавление кнопок экспорта
'copy', 'excel', 'pdf', 'print'
]
});
});
Параметр | Описание | Пример значения |
---|---|---|
pageLength | Количество строк по умолчанию на странице | 25 |
lengthMenu | Опции выбора количества строк | [10, 25, 50, 100] |
ordering | Включение/отключение сортировки | true/false |
searching | Включение/отключение поиска | true/false |
responsive | Адаптивность к размеру экрана | true/false |
scrollY | Фиксированная высота таблицы с прокруткой | '400px' |
stateSave | Сохранение состояния таблицы между перезагрузками | true/false |
Один из ключевых аспектов DataTable — возможность загружать данные динамически из различных источников:
$('#myTable').DataTable({
ajax: {
url: 'api/data',
dataSrc: ''
},
columns: [
{ data: 'name' },
{ data: 'position' },
{ data: 'office' },
{ data: 'age' },
{ data: 'start_date' },
{ data: 'salary' }
]
});
Этот подход особенно полезен при работе с большими наборами данных, которые нецелесообразно включать непосредственно в HTML-код страницы.
Добавление фильтрации и сортировки в таблицы DataTable
Фильтрация и сортировка — фундаментальные функции, которые превращают обычную таблицу в мощный инструмент анализа данных. DataTable предоставляет широкие возможности для настройки этих функций под конкретные потребности проекта. 🔍
Глобальный поиск и его настройка
По умолчанию DataTable включает поле глобального поиска, которое фильтрует все столбцы одновременно:
$('#myTable').DataTable({
searching: true, // Включение функции поиска (включена по умолчанию)
search: {
smart: true, // Интеллектуальный поиск (по словам, а не по всей фразе)
regex: false, // Поддержка регулярных выражений
caseInsensitive: true // Регистронезависимый поиск
}
});
Индивидуальные фильтры по столбцам
Для более детальной фильтрации можно добавить отдельные фильтры для каждого столбца:
$('#myTable').DataTable({
initComplete: function () {
this.api().columns().every(function () {
var column = this;
var select = $('<select><option value=""></option></select>')
.appendTo($(column.footer()).empty())
.on('change', function () {
var val = $.fn.dataTable.util.escapeRegex(
$(this).val()
);
column
.search(val ? '^' + val + '$' : '', true, false)
.draw();
});
column.data().unique().sort().each(function (d, j) {
select.append('<option value="' + d + '">' + d + '</option>')
});
});
}
});
Расширенные возможности сортировки
Настройка сортировки позволяет определить начальный порядок и правила сортировки для конкретных типов данных:
$('#myTable').DataTable({
order: [[4, 'desc'], [0, 'asc']], // Сортировка по 5-му столбцу по убыванию, затем по 1-му по возрастанию
columnDefs: [
{ orderable: false, targets: [5] }, // Отключение сортировки для 6-го столбца
{
type: 'date-euro', // Европейский формат даты (дд.мм.гггг)
targets: 4
},
{
type: 'formatted-num', // Форматированные числа (с разделителями тысяч)
targets: 5
}
]
});
Настройка кастомных типов данных для сортировки
DataTable позволяет определять собственные типы данных для корректной сортировки специфической информации:
$.fn.dataTable.ext.type.order['salary-pre'] = function (data) {
// Удаление символов валюты и преобразование в число для корректной сортировки
return parseFloat(data.replace(/[^\d.-]/g, ''));
};
$('#myTable').DataTable({
columnDefs: [
{
type: 'salary',
targets: 5 // Применение к столбцу с зарплатой
}
]
});
Фильтрация между диапазонами значений
Для числовых данных часто требуется фильтрация по диапазону значений:
$.fn.dataTable.ext.search.push(
function(settings, data, dataIndex) {
var min = parseInt($('#min-age').val(), 10);
var max = parseInt($('#max-age').val(), 10);
var age = parseFloat(data[3]) || 0; // Возраст находится в 4-м столбце
if (
(isNaN(min) && isNaN(max)) ||
(isNaN(min) && age <= max) ||
(min <= age && isNaN(max)) ||
(min <= age && age <= max)
) {
return true;
}
return false;
}
);
// Обработчики событий для полей ввода диапазона
$('#min-age, #max-age').keyup(function() {
table.draw(); // Перерисовка таблицы при изменении значений
});
Марина Соколова, Data Visualization Specialist
Я работала над проектом для крупного интернет-магазина, где требовалось создать панель управления товарным каталогом, содержащим более 50,000 позиций. Первоначальная попытка использовать обычную таблицу с собственными скриптами для фильтрации привела к катастрофическому падению производительности — страница загружалась более 15 секунд.
Решение пришло в виде DataTable.js с его серверной обработкой данных. Мы настроили API на бэкенде, который обрабатывал запросы от DataTable для пагинации, сортировки и фильтрации. Запросы стали передавать только нужные данные и метаданные о количестве записей.
Самой сложной задачей оказалась настройка многоуровневой фильтрации — пользователям требовалось фильтровать товары по категориям, ценовым диапазонам и наличию на складе одновременно. Мы использовали комбинацию расширенных фильтров DataTable и кастомных обработчиков событий.
Время загрузки страницы сократилось до менее 2 секунд, а пользователи получили возможность эффективно управлять огромным каталогом. Ключевым уроком для меня стало понимание, что правильная настройка серверной части DataTable так же важна, как и клиентской.
Не знаете, в какую сторону двигаться в IT? Хотите понять, подойдет ли вам веб-разработка с ее интерактивными инструментами вроде Data Table JS? Тест на профориентацию от Skypro поможет определить ваши сильные стороны и склонности к различным IT-направлениям. За 5 минут вы получите персональный анализ и рекомендации по карьерному пути, который максимально соответствует вашим навыкам и интересам — от фронтенда до аналитики данных.
Расширенные функции и плагины для Data Table JS
Истинная мощь Data Table проявляется при использовании расширенного функционала и плагинов, которые превращают простую таблицу в комплексное решение для работы с данными. Рассмотрим наиболее полезные из них. 💡
Кнопки экспорта и печати
Плагин Buttons добавляет возможность экспорта данных в различные форматы:
// Подключение дополнительных файлов
// <link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.4.2/css/buttons.dataTables.min.css">
// <script src="https://cdn.datatables.net/buttons/2.4.2/js/dataTables.buttons.min.js"></script>
// <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
// <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/pdfmake.min.js"></script>
// <script src="https://cdn.datatables.net/buttons/2.4.2/js/buttons.html5.min.js"></script>
// <script src="https://cdn.datatables.net/buttons/2.4.2/js/buttons.print.min.js"></script>
$('#myTable').DataTable({
dom: 'Bfrtip',
buttons: [
{
extend: 'copy',
text: 'Копировать',
exportOptions: {
columns: [0, 1, 2, 3, 4, 5] // Выбор столбцов для экспорта
}
},
{
extend: 'excel',
text: 'Excel',
title: 'Данные сотрудников', // Название файла
messageTop: 'Отчет сформирован ' + new Date().toLocaleDateString(), // Заголовок
exportOptions: {
columns: ':visible' // Экспорт только видимых столбцов
}
},
{
extend: 'pdf',
text: 'PDF',
orientation: 'landscape', // Ландшафтная ориентация для широких таблиц
pageSize: 'A4',
title: 'Данные сотрудников',
customize: function(doc) {
// Настройка стилей PDF-документа
doc.styles.tableHeader.fontSize = 12;
doc.styles.tableHeader.bold = true;
doc.styles.title.fontSize = 16;
doc.styles.title.bold = true;
}
},
'print' // Кнопка печати
]
});
Фиксированные заголовки и столбцы
Для работы с большими таблицами полезно фиксировать заголовки и ключевые столбцы:
// Подключение дополнительных файлов
// <link rel="stylesheet" href="https://cdn.datatables.net/fixedheader/3.4.0/css/fixedHeader.dataTables.min.css">
// <link rel="stylesheet" href="https://cdn.datatables.net/fixedcolumns/4.3.0/css/fixedColumns.dataTables.min.css">
// <script src="https://cdn.datatables.net/fixedheader/3.4.0/js/dataTables.fixedHeader.min.js"></script>
// <script src="https://cdn.datatables.net/fixedcolumns/4.3.0/js/dataTables.fixedColumns.min.js"></script>
$('#myTable').DataTable({
scrollY: '400px', // Высота таблицы
scrollX: true, // Горизонтальная прокрутка
scrollCollapse: true,
fixedHeader: {
header: true, // Фиксация заголовка
footer: true // Фиксация футера
},
fixedColumns: {
left: 2 // Фиксация первых двух столбцов слева
}
});
Расширенное редактирование данных
Плагин Editor позволяет добавлять, редактировать и удалять данные прямо из интерфейса таблицы:
// Требуется лицензия для коммерческого использования
// Подключение дополнительных файлов
// <link rel="stylesheet" href="https://cdn.datatables.net/select/1.7.0/css/select.dataTables.min.css">
// <link rel="stylesheet" href="https://cdn.datatables.net/editor/2.2.0/css/editor.dataTables.min.css">
// <script src="https://cdn.datatables.net/select/1.7.0/js/dataTables.select.min.js"></script>
// <script src="https://cdn.datatables.net/editor/2.2.0/js/dataTables.editor.min.js"></script>
// Инициализация редактора
var editor = new $.fn.dataTable.Editor({
ajax: 'api/employees',
table: '#myTable',
fields: [
{ label: 'Имя', name: 'name' },
{ label: 'Должность', name: 'position' },
{ label: 'Офис', name: 'office' },
{ label: 'Возраст', name: 'age' },
{
label: 'Дата начала',
name: 'start_date',
type: 'datetime',
format: 'DD.MM.YYYY'
},
{ label: 'Зарплата', name: 'salary' }
]
});
// Инициализация таблицы с поддержкой редактирования
$('#myTable').DataTable({
dom: 'Bfrtip',
ajax: 'api/employees',
columns: [
{ data: 'name' },
{ data: 'position' },
{ data: 'office' },
{ data: 'age' },
{ data: 'start_date' },
{ data: 'salary' }
],
select: true,
buttons: [
{ extend: 'create', editor: editor, text: 'Создать' },
{ extend: 'edit', editor: editor, text: 'Редактировать' },
{ extend: 'remove', editor: editor, text: 'Удалить' }
]
});
Группировка данных
RowGroup плагин позволяет визуально группировать связанные строки:
// Подключение дополнительных файлов
// <link rel="stylesheet" href="https://cdn.datatables.net/rowgroup/1.4.1/css/rowGroup.dataTables.min.css">
// <script src="https://cdn.datatables.net/rowgroup/1.4.1/js/dataTables.rowGroup.min.js"></script>
$('#myTable').DataTable({
order: [[2, 'asc']], // Сортировка по офису (3-й столбец)
rowGroup: {
dataSrc: 2, // Группировка по офису
startRender: function(rows, group) {
// Настройка отображения заголовка группы
return group + ' (' + rows.count() + ' сотрудников)';
},
endRender: function(rows, group) {
// Суммарная статистика по группе
var avgAge = rows.data().pluck(3).reduce(function(a, b) {
return a + b*1;
}, 0) / rows.count();
return 'Средний возраст: ' + avgAge.toFixed(1) + ' лет';
}
}
});
Расширенное форматирование ячеек
Для более сложного отображения данных можно использовать рендеринг ячеек:
$('#myTable').DataTable({
columns: [
{ data: 'name' },
{ data: 'position' },
{ data: 'office' },
{
data: 'age',
render: function(data, type, row) {
if (type === 'display') {
// Цветовое выделение в зависимости от возраста
var color = 'green';
if (data > 40) color = 'orange';
if (data > 50) color = 'red';
return '<span style="color:' + color + '">' + data + '</span>';
}
return data;
}
},
{ data: 'start_date' },
{
data: 'salary',
render: function(data, type, row) {
if (type === 'display') {
// Форматирование числа с разделителями тысяч
return new Intl.NumberFormat('ru-RU', {
style: 'currency',
currency: 'RUB',
maximumFractionDigits: 0
}).format(data);
}
return data;
}
}
]
});
Эти расширенные функции и плагины превращают DataTable в полноценное приложение для управления данными, отвечающее большинству бизнес-требований без необходимости разрабатывать сложные кастомные решения.
Оптимизация производительности таблиц с Data Table JS
При работе с большими объемами данных производительность становится критическим фактором. Правильная оптимизация DataTable позволяет сохранить отзывчивость интерфейса даже при обработке тысяч записей. 🚀
Серверная обработка данных
Самым эффективным методом оптимизации является переход на серверную обработку данных:
$('#myTable').DataTable({
processing: true, // Показ индикатора загрузки
serverSide: true, // Включение серверной обработки
ajax: {
url: 'api/data',
type: 'POST', // Метод запроса
data: function(d) {
// Дополнительные параметры запроса
d.customParam = $('#customFilter').val();
return d;
}
},
columns: [
{ data: 'name' },
{ data: 'position' },
{ data: 'office' },
{ data: 'age' },
{ data: 'start_date' },
{ data: 'salary' }
]
});
При серверной обработке DataTable отправляет следующие параметры:
- draw — счетчик запросов для обеспечения правильного порядка ответов
- start — начальная позиция (для пагинации)
- length — количество записей на странице
- search[value] — строка поиска
- order[i][column] — индекс столбца для сортировки
- order[i][dir] — направление сортировки (asc/desc)
Сервер должен вернуть JSON в следующем формате:
{
"draw": 1,
"recordsTotal": 57000, // Общее количество записей
"recordsFiltered": 285, // Количество записей после фильтрации
"data": [ // Массив данных для текущей страницы
{
"name": "Тигран Петросян",
"position": "Системный архитектор",
"office": "Москва",
"age": 33,
"start_date": "2024/04/25",
"salary": 320000
},
// Другие записи
]
}
Отложенная визуализация
Для улучшения времени первоначальной загрузки используйте отложенную визуализацию:
$('#myTable').DataTable({
deferRender: true, // Отрисовка только видимых строк
scroller: true, // Добавление виртуального скроллинга
scrollY: 400, // Высота области прокрутки
scrollCollapse: true
});
Оптимизация DOM
Настройка структуры DOM помогает уменьшить количество элементов в дереве:
$('#myTable').DataTable({
dom: '<"top"if>rt<"bottom"lp><"clear">', // Минимизированный DOM
paging: true,
ordering: true,
info: true
});
Параметр dom
определяет расположение элементов управления:
- l — элемент выбора количества записей на странице
- f — поле поиска
- t — сама таблица
- i — информация о записях
- p — пагинация
- r — обработка (индикатор загрузки)
- B — кнопки
Ленивая загрузка плагинов
Загружайте плагины только когда они действительно необходимы:
var table = $('#myTable').DataTable({
// Базовая конфигурация
});
// Загрузка плагина только при клике на кнопку экспорта
$('#exportButton').on('click', function() {
// Динамическая загрузка скриптов
$.getScript('https://cdn.datatables.net/buttons/2.4.2/js/dataTables.buttons.min.js', function() {
$.getScript('https://cdn.datatables.net/buttons/2.4.2/js/buttons.html5.min.js', function() {
// Инициализация кнопки экспорта
new $.fn.dataTable.Buttons(table, {
buttons: [
{
extend: 'excel',
text: 'Экспорт в Excel',
exportOptions: {
columns: ':visible'
}
}
]
});
table.buttons().container()
.appendTo('#myTable_wrapper .col-md-6:eq(0)');
// Активация кнопки экспорта
$('#exportButton').off('click').on('click', function() {
table.button('.buttons-excel').trigger();
});
});
});
});
Оптимизация колонок
Оптимизация работы с колонками значительно влияет на производительность:
$('#myTable').DataTable({
columnDefs: [
// Отключение поиска в колонках с изображениями или иконками
{ searchable: false, targets: [5, 6] },
// Отключение сортировки для колонок с кнопками действий
{ orderable: false, targets: [6] },
// Установка приоритетов видимости колонок при адаптивной верстке
{ responsivePriority: 1, targets: 0 }, // Самый высокий приоритет
{ responsivePriority: 2, targets: 4 },
{ responsivePriority: 10000, targets: 5 } // Самый низкий приоритет
],
// Отключение ненужных функций
ordering: true,
paging: true,
searching: true,
info: false // Отключение информации о количестве записей
});
Мониторинг производительности
Встроенные инструменты DataTable позволяют отслеживать производительность:
// Включение режима дебаггинга
$.fn.dataTable.ext.debugMode = true;
// Измерение времени отрисовки
var startTime;
$('#myTable').on('preXhr.dt', function() {
startTime = new Date().getTime();
}).on('xhr.dt', function() {
var endTime = new Date().getTime();
console.log('Время запроса: ' + (endTime – startTime) + 'ms');
}).DataTable();
// Мониторинг процесса рендеринга
$('#myTable').on('draw.dt', function() {
console.log('Таблица перерисована');
});
Применение этих оптимизаций позволяет создавать высокопроизводительные интерактивные таблицы, способные эффективно обрабатывать большие объемы данных без ущерба для пользовательского опыта.
DataTable.js кардинально меняет подход к представлению табличных данных в веб-приложениях. От базовой интерактивности до комплексной обработки информации — эта библиотека предлагает инструменты для решения практически любых задач визуализации структурированных данных. Ключ к успешному использованию DataTable лежит в балансе между богатой функциональностью и оптимизацией производительности. Внедрив серверную обработку данных, тонкую настройку сортировки и фильтрации, а также оптимизацию DOM-структуры, вы получите инструмент, который превзойдет ожидания даже самых требовательных пользователей.