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

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

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

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

Работа с большими наборами данных на веб-страницах часто превращается в настоящий кошмар для разработчиков. Простая 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:

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

Загрузка...