DataTables.js: Работа с дополнительными колонками и адаптивностью

Курс посвящен методам расширения функционала таблиц DataTables для отображения скрытой информации. Вы научитесь использовать плагин Responsive и API для создания дочерних строк с дополнительными данными.

1. Введение в адаптивность таблиц и подключение расширения Responsive

Введение в адаптивность таблиц и подключение расширения Responsive

Добро пожаловать в курс DataTables.js: Работа с дополнительными колонками и адаптивностью. В современном веб-разработке представление данных играет ключевую роль. Таблицы — это классический и наиболее эффективный способ структурирования информации, но у них есть один существенный недостаток: они плохо масштабируются на маленьких экранах.

В этой первой статье мы разберем фундамент работы с адаптивными таблицами, узнаем, почему стандартные решения HTML часто не справляются с задачей, и научимся подключать и настраивать расширение Responsive для библиотеки DataTables.

Проблема больших таблиц на маленьких экранах

Представьте, что у вас есть таблица с десятью колонками: Имя, Фамилия, Должность, Офис, Возраст, Дата начала работы, Зарплата, E-mail, Телефон и ID сотрудника. На широком мониторе десктопа такая таблица выглядит великолепно. Данные легко читаются, сортировка работает, глаз охватывает всю строку целиком.

Однако, как только пользователь открывает эту же страницу на смартфоне, начинается хаос. Стандартное поведение HTML-таблицы в такой ситуации обычно сводится к двум вариантам:

  • Сжатие контента: Браузер пытается уместить все колонки в ширину экрана, перенося текст внутри ячеек. Это приводит к тому, что одна строка растягивается на высоту всего экрана, превращая таблицу в нечитаемую «кашу».
  • Горизонтальный скролл: Таблица сохраняет свою ширину, и появляется полоса прокрутки. Пользователю приходится постоянно свайпать влево и вправо, чтобы сопоставить имя сотрудника с его зарплатой, которая находится в другом конце таблицы.
  • Оба варианта негативно сказываются на пользовательском опыте (UX). Именно здесь на помощь приходит библиотека DataTables с расширением Responsive.

    !Сравнение неадаптивной таблицы и таблицы с расширением Responsive на мобильном устройстве

    Что такое DataTables Responsive?

    DataTables — это мощный плагин для jQuery, который добавляет интерактивность к HTML-таблицам (сортировку, поиск, пагинацию). Сам по себе DataTables не делает таблицу полностью адаптивной в сложном понимании этого слова. Он может добавить горизонтальную прокрутку, но это не решает проблему удобства чтения.

    Responsive — это официальное расширение (extension) для DataTables. Его задача — интеллектуально управлять видимостью колонок в зависимости от ширины экрана устройства.

    Принцип работы

    Когда ширины экрана недостаточно для отображения всех колонок, расширение Responsive автоматически скрывает наименее важные колонки. Самое интересное происходит дальше: скрытая информация не исчезает бесследно. Она перемещается в специальную дочернюю строку (child row), которая раскрывается при клике на первую колонку или специальную иконку.

    Это позволяет сохранить структуру таблицы чистой и аккуратной, предоставляя доступ к дополнительным данным (тем самым «дополнительным колонкам») по требованию.

    Подготовка окружения и подключение библиотек

    Для работы нам понадобится подключить несколько файлов. DataTables зависит от библиотеки jQuery, поэтому порядок подключения имеет критическое значение.

    Вам понадобятся три компонента:

  • jQuery (базовая библиотека).
  • DataTables Core (основной файл стилей и скриптов таблицы).
  • DataTables Responsive (файлы стилей и скриптов расширения).
  • !Иерархия зависимостей для работы адаптивной таблицы

    Подключение через CDN

    Самый быстрый способ начать работу — использовать CDN (Content Delivery Network). Добавьте следующие ссылки в секцию <head> вашего HTML-документа для стилей и перед закрывающим тегом </body> для скриптов.

    #### Стили (CSS)

    #### Скрипты (JS)

    Обратите внимание на порядок: сначала jQuery, потом DataTables, потом Responsive.

    > Важно: Версии библиотек могут меняться. Всегда проверяйте актуальные ссылки на официальном сайте datatables.net.

    Создание HTML-структуры

    DataTables требует корректной семантической разметки таблицы. Обязательно наличие тегов <thead> и <tbody>. Также таблице необходимо присвоить уникальный id и класс display (или table, если вы используете Bootstrap, но об этом позже).

    Для корректной работы расширения Responsive рекомендуется добавить класс nowrap к тегу <table>. Этот класс предотвращает перенос текста внутри ячеек, заставляя расширение скрывать колонку целиком, если она не помещается.

    Пример разметки:

    javascript ('#example').DataTable({ responsive: true }); }); html <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Адаптивная таблица DataTables</title> <!-- Стили --> <link rel="stylesheet" href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.min.css"> <link rel="stylesheet" href="https://cdn.datatables.net/responsive/2.4.1/css/responsive.dataTables.min.css"> <style> body { font-family: Arial, sans-serif; padding: 20px; } </style> </head> <body>

    <h2>Пример адаптивной таблицы</h2> <table id="myTable" class="display nowrap" style="width:100%"> <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>Москва</td> <td>28</td> <td>+7 (999) 000-00-00</td> </tr> <tr> <td>Анна</td> <td>Петрова</td> <td>Дизайнер</td> <td>Санкт-Петербург</td> <td>24</td> <td>+7 (999) 111-11-11</td> </tr> </tbody> </table>

    <!-- Скрипты --> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js"></script> <script src="https://cdn.datatables.net/responsive/2.4.1/js/dataTables.responsive.min.js"></script>

    <script> ('#myTable').DataTable({ responsive: true }); }); </script>

    </body> </html> ```

    Заключение

    Мы успешно подключили библиотеку DataTables и расширение Responsive. Теперь ваша таблица умеет адаптироваться под любые размеры экранов, скрывая «лишние» колонки и предоставляя доступ к ним через удобный интерфейс раскрывающихся строк.

    Это базовый уровень адаптивности. Однако часто возникает необходимость контролировать, какие именно колонки должны скрываться первыми, а какие должны оставаться видимыми всегда (например, имя сотрудника или кнопка действия). В следующей статье мы углубимся в настройку приоритетов колонок и научимся управлять их поведением вручную.

    2. Управление видимостью колонок: приоритеты и контрольные точки (Breakpoints)

    Управление видимостью колонок: приоритеты и контрольные точки (Breakpoints)

    В предыдущей статье мы научились подключать расширение Responsive к DataTables. Мы увидели магию одной строки кода responsive: true, которая автоматически скрывает колонки, не помещающиеся на экране. Однако, автоматика — это не всегда хорошо.

    По умолчанию DataTables скрывает колонки справа налево. Но что, если самая правая колонка — это кнопка «Редактировать», которая должна быть доступна всегда? Или что, если колонка «ID», находящаяся слева, совершенно не важна для мобильного пользователя?

    В этой статье мы возьмем управление в свои руки. Мы научимся расставлять приоритеты для колонок и настраивать контрольные точки (breakpoints), чтобы таблица вела себя предсказуемо на любом устройстве.

    Логика скрытия колонок по умолчанию

    Прежде чем менять поведение, давайте поймем, как оно работает «из коробки». Когда ширины экрана недостаточно, DataTables анализирует таблицу и принимает решение, какую колонку скрыть, основываясь на одном простом правиле: скрывается колонка с наибольшим индексом (самая правая).

    Если места все еще мало, скрывается следующая справа, и так далее. Исключение составляет только первая колонка (обычно с индексом 0), так как она часто содержит ключевой идентификатор или иконку раскрытия дочерней строки.

    Это поведение часто приводит к проблемам UX (User Experience). Например, в таблице сотрудников колонка «Действия» (с кнопками удалить/изменить) часто стоит последней. На мобильном телефоне она исчезнет первой, и пользователь потеряет возможность управлять записью.

    Приоритеты колонок (Column Priority)

    Чтобы решить эту проблему, DataTables предоставляет механизм приоритетов responsivePriority. Это числовое значение, которое определяет «важность» колонки. Чем меньше число, тем выше приоритет, и тем дольше колонка будет оставаться видимой.

    !Схема работы приоритетов: колонки с низким числовым значением остаются видимыми, а с высоким — скрываются.

    Как назначать приоритеты

    Есть два основных способа задать приоритет: через HTML-атрибуты и через инициализацию JavaScript.

    #### Способ 1: HTML-атрибут data-priority

    Это самый наглядный способ. Вы добавляете атрибут data-priority к тегам <th> в заголовке таблицы.

    В этом примере:

  • Колонки «Имя» и «Действия» имеют наивысший приоритет (1). Они будут скрыты в самую последнюю очередь.
  • Колонка «Зарплата» имеет приоритет 2. Она исчезнет раньше, чем «Имя», но позже, чем остальные.
  • Колонки без атрибута получают приоритет по умолчанию (обычно 10000 и выше), поэтому они будут скрываться первыми справа налево.
  • #### Способ 2: JavaScript columnDefs

    Если вы генерируете таблицу динамически или предпочитаете хранить настройки в скриптах, используйте массив columnDefs внутри конфигурации DataTables.

    Теперь вы можете использовать классы min-fablet, max-phone и так далее в вашем HTML.

    Комбинирование подходов

    Наилучший результат достигается при комбинировании приоритетов и классов контрольных точек. Классы дают жесткий контроль («никогда не показывать это на телефоне»), а приоритеты помогают DataTables изящно обрабатывать пограничные случаи, когда контент все равно не влезает, даже если класс разрешает отображение.

    Полный пример

    Давайте создадим таблицу заказов интернет-магазина.

    Требования:

  • Номер заказа и Статус должны быть видны всегда.
  • Кнопка «Детали» должна быть видна всегда.
  • Клиент — важная информация, скрывать в последнюю очередь.
  • Сумма — показывать начиная с горизонтальной ориентации телефона.
  • Дата и Комментарий — показывать только на планшетах и десктопах.
  • В этом примере мы использовали: * data-priority="1" для критически важных колонок (Заказ, Статус, Детали). * data-priority="2" для Клиента, чтобы он скрывался позже остальных второстепенных данных. * class="min-mobile-l" для Суммы, чтобы скрыть её на очень узких экранах (портретный режим старых телефонов). * class="min-tablet" и class="desktop" для второстепенной информации.

    Заключение

    Теперь вы не зависите от стандартного поведения DataTables. Используя responsivePriority и классы контрольных точек, вы можете проектировать таблицы, которые не просто «сжимаются», а адаптируются под контекст использования устройства, сохраняя доступ к самым важным данным.

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