Как использовать Data Table JS для создания интерактивных таблиц

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Для кого эта статья:

  • разработчики веб-приложений и сайтов
  • студенты и начинающие специалисты в области веб-разработки
  • специалисты по обработке данных и аналитике

Работа с большими наборами данных на веб-страницах часто превращается в настоящий кошмар для разработчиков. Простая 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.jsAG GridTabulator
Базовый размер библиотеки88 КБ (минифицированный)142 КБ (минифицированный)125 КБ (минифицированный)
Интеграция с jQueryНативнаяЧастичнаяОтсутствует
Порог вхожденияНизкийСреднийСредний
Сообщество разработчиковОчень большоеБольшоеСреднее

Алексей Петров, Senior Frontend Developer

Когда мне поручили модернизировать аналитический портал компании, основная проблема была очевидна — таблицы с тысячами строк данных, в которых пользователи буквально тонули. Клиенты жаловались на невозможность быстро найти нужную информацию и отсутствие фильтрации.

Я рассматривал несколько библиотек, но выбор пал на DataTable.js из-за простоты интеграции и богатого функционала. Внедрение заняло всего день — базовая конфигурация потребовала минимум кода, а результаты превзошли ожидания. Пользователи получили возможность сортировать, фильтровать и экспортировать данные, а количество обращений в техподдержку сократилось на 68% в течение первого месяца.

Самое впечатляющее — производительность системы практически не пострадала, несмотря на обработку больших объемов данных. DataTable.js стал нашим стандартом для всех проектов, где требуется интерактивная работа с табличными данными.

Кинга Идем в IT: пошаговый план для смены профессии

Настройка Data Table JS: базовая конфигурация

Внедрение DataTable.js в ваш проект начинается с правильной настройки библиотеки. Процесс включает в себя несколько простых шагов, которые позволят быстро получить работающую интерактивную таблицу. 🛠️

Шаг 1: Подключение необходимых файлов

В первую очередь необходимо подключить CSS и JavaScript файлы библиотеки. Вы можете использовать CDN или установить библиотеку через npm:

HTML
Скопировать код
<!-- 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 для данных:

HTML
Скопировать код
<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 требует минимум кода:

JS
Скопировать код
$(document).ready(function() {
$('#myTable').DataTable();
});

Однако, реальная мощь библиотеки раскрывается при использовании настроек конфигурации:

JS
Скопировать код
$(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 — возможность загружать данные динамически из различных источников:

JS
Скопировать код
$('#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 включает поле глобального поиска, которое фильтрует все столбцы одновременно:

JS
Скопировать код
$('#myTable').DataTable({
searching: true, // Включение функции поиска (включена по умолчанию)
search: {
smart: true, // Интеллектуальный поиск (по словам, а не по всей фразе)
regex: false, // Поддержка регулярных выражений
caseInsensitive: true // Регистронезависимый поиск
}
});

Индивидуальные фильтры по столбцам

Для более детальной фильтрации можно добавить отдельные фильтры для каждого столбца:

JS
Скопировать код
$('#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>')
});
});
}
});

Расширенные возможности сортировки

Настройка сортировки позволяет определить начальный порядок и правила сортировки для конкретных типов данных:

JS
Скопировать код
$('#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 позволяет определять собственные типы данных для корректной сортировки специфической информации:

JS
Скопировать код
$.fn.dataTable.ext.type.order['salary-pre'] = function (data) {
// Удаление символов валюты и преобразование в число для корректной сортировки
return parseFloat(data.replace(/[^\d.-]/g, ''));
};

$('#myTable').DataTable({
columnDefs: [
{
type: 'salary',
targets: 5 // Применение к столбцу с зарплатой
}
]
});

Фильтрация между диапазонами значений

Для числовых данных часто требуется фильтрация по диапазону значений:

JS
Скопировать код
$.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 добавляет возможность экспорта данных в различные форматы:

JS
Скопировать код
// Подключение дополнительных файлов
// <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' // Кнопка печати
]
});

Фиксированные заголовки и столбцы

Для работы с большими таблицами полезно фиксировать заголовки и ключевые столбцы:

JS
Скопировать код
// Подключение дополнительных файлов
// <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 позволяет добавлять, редактировать и удалять данные прямо из интерфейса таблицы:

JS
Скопировать код
// Требуется лицензия для коммерческого использования
// Подключение дополнительных файлов
// <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 плагин позволяет визуально группировать связанные строки:

JS
Скопировать код
// Подключение дополнительных файлов
// <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) + ' лет';
}
}
});

Расширенное форматирование ячеек

Для более сложного отображения данных можно использовать рендеринг ячеек:

JS
Скопировать код
$('#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 позволяет сохранить отзывчивость интерфейса даже при обработке тысяч записей. 🚀

Серверная обработка данных

Самым эффективным методом оптимизации является переход на серверную обработку данных:

JS
Скопировать код
$('#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 в следующем формате:

json
Скопировать код
{
"draw": 1,
"recordsTotal": 57000, // Общее количество записей
"recordsFiltered": 285, // Количество записей после фильтрации
"data": [ // Массив данных для текущей страницы
{
"name": "Тигран Петросян",
"position": "Системный архитектор",
"office": "Москва",
"age": 33,
"start_date": "2024/04/25",
"salary": 320000
},
// Другие записи
]
}

Отложенная визуализация

Для улучшения времени первоначальной загрузки используйте отложенную визуализацию:

JS
Скопировать код
$('#myTable').DataTable({
deferRender: true, // Отрисовка только видимых строк
scroller: true, // Добавление виртуального скроллинга
scrollY: 400, // Высота области прокрутки
scrollCollapse: true
});

Оптимизация DOM

Настройка структуры DOM помогает уменьшить количество элементов в дереве:

JS
Скопировать код
$('#myTable').DataTable({
dom: '<"top"if>rt<"bottom"lp><"clear">', // Минимизированный DOM
paging: true,
ordering: true,
info: true
});

Параметр dom определяет расположение элементов управления:

  • l — элемент выбора количества записей на странице
  • f — поле поиска
  • t — сама таблица
  • i — информация о записях
  • p — пагинация
  • r — обработка (индикатор загрузки)
  • B — кнопки

Ленивая загрузка плагинов

Загружайте плагины только когда они действительно необходимы:

JS
Скопировать код
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();
});
});
});
});

Оптимизация колонок

Оптимизация работы с колонками значительно влияет на производительность:

JS
Скопировать код
$('#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 позволяют отслеживать производительность:

JS
Скопировать код
// Включение режима дебаггинга
$.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-структуры, вы получите инструмент, который превзойдет ожидания даже самых требовательных пользователей.