Практическая работа №8
Работа с DOM (Document Object Model)
Section titled “Работа с DOM (Document Object Model)”Цель работы:
- Понять, что DOM — это программный интерфейс для HTML-документов, представляющий их в виде древовидной структуры.
- Освоить основные методы поиска элементов на странице.
- Научиться программно создавать новые элементы и вставлять их в документ.
- Отработать управление классами и стилями элементов.
Основные теоретические положения
Section titled “Основные теоретические положения”Что такое DOM?
Section titled “Что такое DOM?”Document Object Model (DOM) — это независимый от платформы и языка программный интерфейс, который позволяет программам и скриптам динамически обращаться к содержимому, структуре и стилям документа. Браузер преобразует HTML-код в дерево объектов, где каждый тег, атрибут и текст становится узлом (Node).
Основные методы поиска элементов
Section titled “Основные методы поиска элементов”| Метод | Описание | Пример |
|---|---|---|
document.getElementById() | Находит элемент по его уникальному id. | document.getElementById('root') |
document.querySelector() | Находит первый элемент, соответствующий CSS-селектору. | document.querySelector('.card') |
document.querySelectorAll() | Находит все элементы, соответствующие CSS-селектору, возвращает NodeList. | document.querySelectorAll('li.active') |
document.getElementsByClassName() | Находит все элементы по имени класса, возвращает “живую” HTMLCollection. | document.getElementsByClassName('user') |
Создание и вставка элементов
Section titled “Создание и вставка элементов”- Создание:
document.createElement(tagName)создает новый элемент с указанным именем тега. - Вставка:
parentNode.appendChild(childNode): Вставляет узелchildNodeв конецparentNode.parentNode.insertBefore(newNode, referenceNode): ВставляетnewNodeпередreferenceNode.element.insertAdjacentHTML(position, text): Вставляет HTML-строку в указанную позицию относительно элемента.
Управление классами и стилями
Section titled “Управление классами и стилями”- Классы: Свойство
element.classListпредоставляет удобные методы для работы с классами:element.classList.add('class-name')element.classList.remove('class-name')element.classList.toggle('class-name')
- Стили: Свойство
element.styleпозволяет устанавливать инлайн-стили:element.style.color = 'red'element.style.backgroundColor = 'yellow'
Основные требования к практической работе
Section titled “Основные требования к практической работе”- Создать HTML-файл (
index.html) с минимальной разметкой и пустым контейнером (<div id="root">). - Весь код, генерирующий DOM-структуру, должен быть написан в отдельном файле
script.js. - Использовать только методы чистого JavaScript (без библиотек).
- Обязательно использовать методы:
document.createElement(),element.appendChild(),element.classList.add(),element.style.propertyилиelement.textContent.
Задания для выполнения
Section titled “Задания для выполнения”Выбор варианта: Номер варианта соответствует порядковому номеру студента в списке группы. Если количество студентов превышает 10, варианты повторяются по кругу (например, 11-й студент выполняет Вариант 1, 12-й - Вариант 2 и т.д.).
Вариант 1: Список пользователей
Section titled “Вариант 1: Список пользователей”Данные: Массив объектов users (имя, возраст, статус: active/inactive).
Задача:
- Создать неупорядоченный список (
<ul>). - Для каждого пользователя создать элемент списка (
<li>). - Внутри
<li>отобразить имя и возраст. - Если статус пользователя
inactive, добавить элементу<li>классuser-inactiveи установить красный цвет текста через свойствоstyle.
Вариант 2: Каталог книг
Section titled “Вариант 2: Каталог книг”Данные: Массив объектов books (название, автор, год издания).
Задача:
- Создать контейнер (
<div>) с классомbook-catalog. - Для каждой книги создать карточку (
<div class="book-card">). - Внутри карточки создать заголовок (
<h3>) для названия и параграф (<p>) для автора и года. - Используя
insertAdjacentHTML, добавить в начало контейнера заголовок<h2>Каталог книг</h2>.
Вариант 3: Таблица продуктов
Section titled “Вариант 3: Таблица продуктов”Данные: Массив объектов products (название, цена, количество на складе).
Задача:
- Создать HTML-таблицу (
<table>) с заголовком (<thead>) и телом (<tbody>). - Заголовок должен содержать колонки: “Название”, “Цена”, “Количество”.
- Для каждого продукта создать строку (
<tr>) в теле таблицы. - Если количество на складе меньше 5, добавить строке класс
low-stock.
Вариант 4: Список задач (To-Do List)
Section titled “Вариант 4: Список задач (To-Do List)”Данные: Массив объектов tasks (текст задачи, статус: completed/pending).
Задача:
- Создать упорядоченный список (
<ol>). - Для каждой задачи создать элемент списка (
<li>). - Текст задачи должен быть обернут в элемент
<span>. - Если статус
completed, найти этот<span>и добавить ему стильtext-decoration: line-through.
Вариант 5: Меню навигации
Section titled “Вариант 5: Меню навигации”Данные: Массив объектов menuItems (текст, ссылка href).
Задача:
- Создать элемент навигации (
<nav>). - Внутри создать неупорядоченный список (
<ul>). - Для каждого элемента создать
<li>с вложенным тегом<a>. - Установить атрибуты
hrefдля ссылок. - Добавить первому элементу списка класс
active-link.
Вариант 6: Галерея изображений
Section titled “Вариант 6: Галерея изображений”Данные: Массив объектов images (URL изображения, подпись).
Задача:
- Создать контейнер (
<div id="gallery">). - Для каждого объекта создать элемент
figure. - Внутри
figureсоздать тег<img>(установитьsrc) иfigcaption(для подписи). - Установить всем изображениям одинаковую ширину через свойство
style(например,width: 200px).
Вариант 7: Список комментариев
Section titled “Вариант 7: Список комментариев”Данные: Массив объектов comments (автор, текст комментария, дата).
Задача:
- Создать контейнер (
<section id="comments-section">). - Для каждого комментария создать блок (
<article class="comment">). - Внутри блока создать параграф для автора (жирным шрифтом) и параграф для текста комментария.
- Использовать метод
createTextNodeдля вставки текста комментария.
Вариант 8: Список валют
Section titled “Вариант 8: Список валют”Данные: Массив объектов currencies (код валюты, название, курс к USD).
Задача:
- Создать список определений (
<dl>). - Для каждой валюты создать термин (
<dt>) для кода валюты и определение (<dd>) для названия и курса. - Используя
textContent, вставить курс с округлением до двух знаков после запятой.
Вариант 9: Рейтинг фильмов
Section titled “Вариант 9: Рейтинг фильмов”Данные: Массив объектов movies (название, жанр, рейтинг от 1 до 10).
Задача:
- Создать упорядоченный список (
<ol>). - Для каждого фильма создать элемент списка (
<li>). - Внутри
<li>отобразить название и рейтинг. - Используя
setAttribute, добавить элементу<li>атрибутdata-ratingсо значением рейтинга.
Вариант 10: Профиль сотрудника
Section titled “Вариант 10: Профиль сотрудника”Данные: Массив объектов employees (имя, должность, отдел).
Задача:
- Создать контейнер (
<div id="employees-list">). - Для каждого сотрудника создать блок (
<div class="employee-profile">). - Внутри блока создать параграф для имени, должности и отдела.
- Используя метод
cloneNode(true), создать и вставить в конец контейнера дополнительный блок-разделитель (<hr>) после каждого профиля.
Контрольные вопросы
Section titled “Контрольные вопросы”- Что такое Document Object Model (DOM) и какова его структура?
- В чем разница между
document.getElementById()иdocument.querySelector()? - Как создать новый HTML-элемент с помощью JavaScript?
- Объясните разницу между
element.appendChild()иelement.insertAdjacentHTML(). - Как добавить, удалить и переключить CSS-класс элемента, используя свойство
classList? - В каких случаях предпочтительнее использовать
element.textContent, а в каких —element.innerHTML?