Kodokon kodokon.com

Глобальные атрибуты и data-*

Используй атрибуты, которые работают везде, и храни свои данные прямо в HTML.

7 мин · 3 вопросов

Открыть этот урок в Kodokon

Некоторые атрибуты работают на любом элементе: это глобальные атрибуты. Ты уже используешь id и class; добавь в свой арсенал hidden (скрывает элемент), lang (указывает язык фрагмента), title (подсказка при наведении) и tabindex (порядок фокуса с клавиатуры).

HTML
<p lang="en" title="Original quote">
  Stay hungry, stay foolish.
</p>

<div hidden id="cookie-banner" class="banner">
  We use cookies.
</div>
lang, title и hidden в реальной ситуации.

Нужно прикрепить к элементу собственные данные? Никогда не выдумывай свой атрибут: HTML зарезервировал для этого атрибуты data-*. Имя после дефиса выбираешь ты сам, строчными буквами в kebab-case. Типичные случаи: идентификатор товара, состояние интерфейса, настройка компонента.

HTML
<article
  class="product-card"
  data-product-id="42"
  data-category="books"
  data-in-stock="true"
>
  <h2>HTML for pros</h2>
</article>
Бизнес-данные, прикреплённые к карточке товара.

Со стороны JavaScript эти атрибуты читаются через свойство dataset. Внимание на автоматическое преобразование: kebab-case из HTML превращается в camelCase в JavaScript. Так что data-product-id читается как dataset.productId. Значения всегда являются строками, даже "true" или "42".

JAVASCRIPT
const card = document.querySelector(".product-card");

console.log(card.dataset.productId); // "42"
console.log(card.dataset.inStock);   // "true"

card.dataset.state = "selected";
Чтение и запись data-* через dataset.

Проверка знаний

Убедись, что запомнил ключевые моменты этого урока.

  1. Как прочитать атрибут data-user-id в JavaScript?
    • element.dataset.userId
    • element.dataset.user-id
    • element.data.userId
    • element.getData("user-id")
  2. Для чего нужны атрибуты data-*?
    • Хранить произвольные данные, которые может прочитать твой JavaScript
    • Ускорять загрузку данных страницы
    • Отправлять данные на сервер при submit формы
  3. Какой глобальный атрибут скрывает элемент семантически?
    • hidden
    • invisible
    • display