
В этом разделе вы познакомитесь с рядом практических задач, направленных на освоение работы с `data-*` атрибутами. Каждое задание предоставит вам готовый HTML-код и частично написанный JavaScript, в котором вам нужно будет заполнить пропуски. Вы сможете увидеть результат своей работы прямо на странице, что поможет вам лучше понять, как `data-*` атрибуты взаимодействуют с JavaScript. Задания расположены от простого к сложному, начиная с базового чтения значений атрибутов и заканчивая более сложными сценариями динамического изменения контента и стилей на основе данных, хранящихся в `data-*` атрибутах. Удачи в практике!
- Модуль 1: Основы выбора элементов
- Выбор элемента по ID.
- Выбор элементов по классу.
- Выбор элементов по тегу.
- Выбор по селектору CSS.
- Выбор по атрибуту.
- Поиск элементов внутри другого элемента.
- Поиск родительского элемента.
- Поиск соседних элементов (предыдущий, следующий).
- Поиск первого и последнего дочернего элемента.
- Поиск всех дочерних элементов.
- Модуль 2: Манипуляция содержимым
- Модуль 3: Работа с атрибутами
- Модуль 4: Управление классами
- Модуль 5: Управление стилями
- Модуль 6: Создание и удаление элементов
- Создание нового элемента.
- Вставка элемента перед другим элементом.
- Вставка элемента после другого элемента.
- Добавление элемента в определенную позицию внутри списка дочерних элементов.
- Удаление элемента из DOM.
- Замена одного элемента другим.
- Перемещение существующего элемента в другое место DOM..
- Очистка содержимого элемента без его удаления.
- Модуль 7: Обработка событий
- Модуль 8: Работа с формами
- Модуль 9: Продвинутые манипуляции
- Модуль 10: Работа с размерами и прокруткой
- Получение размеров элемента.
- Получение позиции элемента относительно окна браузера.
- Получение позиции элемента относительно родительского элемента.
- Управление прокруткой страницы.
- Определение, виден ли элемент в текущей области просмотра.
- Плавная прокрутка к элементу.
- Создание элемента, который фиксируется при прокрутке.
- Модуль 11: Работа с медиа-элементами
- Модуль 12: Практические задания
Получение значения `data-атрибута`
Выведите в консоль значение `data-product-id` атрибута элемента с id "product".
<div id="product" data-product-id="12345" data-product-name="Телефон">Товар</div>
const productElement = document.input__1("product");
const productId = productElement.dataset.input__2;
console.log(productId);
Отображение `data-атрибута` на странице
Отобразите значение `data-username` атрибута элемента с id "user-info" в параграфе с id "username-output".
<div id="user-info" data-username="JohnDoe">Информация о пользователе</div>
<p id="username-output"></p>
const userInfoElement = document.input__1("user-info");
const usernameOutput = document.input__2("username-output");
const username = userInfoElement.dataset.input__3;
usernameOutput.textContent = username;
Изменение текста кнопки на основе `data-атрибута`
Измените текст кнопки с id "action-button" на значение `data-button-text` атрибута этой же кнопки.
<button id="action-button" data-button-text="Нажми меня">Исходный текст</button>
const button = document.input__1("action-button");
const buttonText = button.dataset.input__2;
button.textContent = input__3;
Изменение стиля элемента на основе `data-атрибута`
Измените цвет фона элемента с id "styled-div" на цвет, указанный в `data-background-color` атрибуте.
<div id="styled-div" data-background-color="lightblue" style="padding: 20px; border: 1px solid gray;">Элемент для стилизации</div>
const styledDiv = document.input__1("styled-div");
const backgroundColor = styledDiv.dataset.input__2;
styledDiv.style.input__3 = backgroundColor;
Обновление `data-атрибута` при клике
При клике на кнопку с id "counter-button" увеличьте значение `data-counter` атрибута на 1 и обновите текст кнопки, отображая новое значение счетчика.
<button id="counter-button" data-counter="0">Счетчик: 0</button>
const counterButton = document.input__1("counter-button");
counterButton.addEventListener('click', function() {
let counter = parseInt(counterButton.dataset.input__2) ;
counterinput__3;
counterButton.dataset.input__4 = counter;
counterButton.textContent = `Счетчик: ${input__5}`;
});
Фильтрация элементов по `data-атрибуту`
Скрыть все элементы списка `li` с классом "item", у которых `data-status` атрибут равен "hidden".
<ul id="item-list">
<li class="item" data-status="visible">Пункт 1</li>
<li class="item" data-status="hidden">Пункт 2</li>
<li class="item" data-status="visible">Пункт 3</li>
<li class="item" data-status="hidden">Пункт 4</li>
</ul>
const items = document.input__1('.item');
items.forEach(item => {
if (item.dataset.input__2 === input__3) {
item.style.display = input__4;
}
});
Использование нескольких `data-атрибутов` для создания карточки товара
Заполните карточку товара (элемент с id "product-card") данными из `data-product-name`, `data-product-price` и `data-product-description` атрибутов этого же элемента. Отобразите название в элементе с классом "product-name", цену в элементе с классом "product-price", и описание в элементе с классом "product-description".
.product-card {
border: 1px solid #ccc;
padding: 10px;
width: 300px;
}
.product-name {
font-size: 1.2em;
font-weight: bold;
}
.product-price {
color: green;
}
<div id="product-card" class="product-card" data-product-name="Наушники" data-product-price="1500" data-product-description="Беспроводные наушники с шумоподавлением">
<div class="product-name"></div>
<div class="product-price"></div>
<div class="product-description"></div>
</div>
const productCard = document.input__1("product-card");
const productName = productCard.dataset.input__2;
const productPrice = productCard.dataset.input__3;
const productDescription = productCard.dataset.input__4;
const nameElement = productCard.querySelector('.product-name');
const priceElement = productCard.querySelector('.product-price');
const descriptionElement = productCard.querySelector('.product-description');
nameElement.textContent = input__5;
priceElement.textContent = `${input__6} ₽`;
descriptionElement.textContent = input__7;