← Назад к вопросам
Приведи примеры использования Data аттрибутов
1.0 Junior🔥 161 комментариев
#HTML и CSS
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Data атрибуты: примеры использования
Data атрибуты (data-*) — это специальные HTML атрибуты для хранения пользовательских данных в DOM элементах, позволяющие связывать информацию с элементами без нарушения валидности HTML.
Синтаксис и основы
<div data-user-id="123" data-role="admin">Элемент</div>
<button data-action="submit" data-form-id="login">Отправить</button>
Пример 1: Кнопки действий
<button data-action="delete" data-item-id="42">Удалить</button>
<button data-action="edit" data-item-id="42">Редактировать</button>
document.querySelectorAll('button').forEach(btn => {
btn.addEventListener('click', (e) => {
const action = btn.dataset.action;
const itemId = btn.dataset.itemId;
if (action === 'delete') {
deleteItem(itemId);
}
});
});
Пример 2: Список товаров
<div class="product" data-product-id="101" data-price="99.99">
<h3>Товар</h3>
<button class="add-cart">В корзину</button>
</div>
document.querySelectorAll('.add-cart').forEach(btn => {
btn.addEventListener('click', (e) => {
const product = e.target.closest('.product');
const id = product.dataset.productId;
const price = product.dataset.price;
addToCart(id, price);
});
});
Пример 3: Конфигурация компонентов
<div class="carousel"
data-autoplay="true"
data-interval="3000"
data-loop="true">
<img src="slide1.jpg" />
<img src="slide2.jpg" />
</div>
const carousel = document.querySelector('.carousel');
const config = {
autoplay: carousel.dataset.autoplay === 'true',
interval: parseInt(carousel.dataset.interval),
loop: carousel.dataset.loop === 'true'
};
initCarousel(carousel, config);
Пример 4: Модальные окна
<button class="open-modal" data-modal-id="user-profile" data-user-id="5">Профиль</button>
<div id="user-profile" class="modal" data-type="profile">
<h2>Профиль пользователя</h2>
<button data-action="close">Закрыть</button>
</div>
document.querySelectorAll('.open-modal').forEach(btn => {
btn.addEventListener('click', (e) => {
const modalId = btn.dataset.modalId;
const userId = btn.dataset.userId;
const modal = document.getElementById(modalId);
modal.style.display = 'block';
loadUserData(userId);
});
});
Пример 5: JSON данные
<div data-config='{"theme":"dark","lang":"en"}'>
Контент
</div>
const element = document.querySelector('[data-config]');
const config = JSON.parse(element.dataset.config);
console.log(config.theme); // 'dark'
Пример 6: Тестирование E2E
<input type="email" data-testid="email-input" />
<button data-testid="submit-button">Отправить</button>
test('submit form', async ({ page }) => {
const input = page.getByTestId('email-input');
const button = page.getByTestId('submit-button');
await input.fill('test@example.com');
await button.click();
});
Пример 7: React компонент
const Card: React.FC<{ id: string; title: string }> = ({ id, title }) => {
const handleDelete = (e: React.MouseEvent) => {
const deleteBtn = e.currentTarget as HTMLButtonElement;
const itemId = deleteBtn.getAttribute('data-item-id');
deleteItem(itemId);
};
return (
<div className="card">
<h3>{title}</h3>
<button data-item-id={id} onClick={handleDelete}>
Удалить
</button>
</div>
);
};
Доступ к data атрибутам
const elem = document.getElementById('my-elem');
// Установка через dataset
elem.dataset.userId = '123';
// Получение через dataset
console.log(elem.dataset.userId);
// Через getAttribute
elem.getAttribute('data-user-id');
// CSS селектор
document.querySelector('[data-status="active"]');
Преимущества
- Хранение данных прямо в HTML элементах
- Клиентская идентификация без глобальных переменных
- Удобство в тестировании (data-testid)
- Соответствие стандарту HTML5
- Не влияют на SEO и индексирование
- Удаляются при удалении элемента