
В этом тренажере вы научитесь выбирать элементы DOM с помощью CSS-селекторов. Умение находить элементы на странице - фундаментальный навык для JavaScript-разработчика. Вы освоите методы querySelector и querySelectorAll, научитесь составлять селекторы различной сложности: от простых до комбинированных. Задания построены от простого к сложному: начнем с базовых селекторов по тегу, классу и идентификатору, а закончим сложными комбинациями и псевдоклассами. Все задания интерактивны - вы сразу увидите результат своего кода в действии.
- Модуль 1: Основы выбора элементов
- Выбор элемента по ID.
- Выбор элементов по классу.
- Выбор элементов по тегу.
- Выбор по селектору CSS.
- Выбор по атрибуту.
- Поиск элементов внутри другого элемента.
- Поиск родительского элемента.
- Поиск соседних элементов (предыдущий, следующий).
- Поиск первого и последнего дочернего элемента.
- Поиск всех дочерних элементов.
- Модуль 2: Манипуляция содержимым
- Модуль 3: Работа с атрибутами
- Модуль 4: Управление классами
- Модуль 5: Управление стилями
- Модуль 6: Создание и удаление элементов
- Создание нового элемента.
- Вставка элемента перед другим элементом.
- Вставка элемента после другого элемента.
- Добавление элемента в определенную позицию внутри списка дочерних элементов.
- Удаление элемента из DOM.
- Замена одного элемента другим.
- Перемещение существующего элемента в другое место DOM..
- Очистка содержимого элемента без его удаления.
- Модуль 7: Обработка событий
- Модуль 8: Работа с формами
- Модуль 9: Продвинутые манипуляции
- Модуль 10: Работа с размерами и прокруткой
- Получение размеров элемента.
- Получение позиции элемента относительно окна браузера.
- Получение позиции элемента относительно родительского элемента.
- Управление прокруткой страницы.
- Определение, виден ли элемент в текущей области просмотра.
- Плавная прокрутка к элементу.
- Создание элемента, который фиксируется при прокрутке.
- Модуль 11: Работа с медиа-элементами
- Модуль 12: Практические задания
Выбор элемента по ID
Задание: найдите элемент с идентификатором 'main-title' и измените его текст на 'Заголовок изменен'. Используйте для этого метод querySelector и подходящий CSS-селектор.
<div class="container">
<h1 id="main-title">Исходный заголовок</h1>
<p>Какой-то текст под заголовком</p>
</div>
// Выберите элемент с id 'main-title' и измените его текст
let titleElement = document.input__1('#main-title');
titleElement.input__2 = "Заголовок изменен";
Выбор элемента по классу
Задание: найдите элемент с классом 'highlight' и измените его цвет фона на желтый. Используйте метод querySelector и соответствующий CSS-селектор.
<div class="container">
<p>Обычный параграф</p>
<p class="highlight">Этот параграф нужно выделить</p>
<p>Еще один обычный параграф</p>
</div>
// Выберите элемент с классом 'highlight' и измените его фон
let highlightedElement = document.input__1('.highlight');
highlightedElement.style.input__2 = "input__3";
Выбор элемента по тегу
Задание: найдите первый элемент h2 на странице и добавьте к его тексту ' (изменено)'. Используйте метод querySelector и селектор по имени тега.
<div class="content">
<h1>Главный заголовок</h1>
<h2>Подзаголовок 1</h2>
<p>Текст первого раздела</p>
<h2>Подзаголовок 2</h2>
<p>Текст второго раздела</p>
</div>
// Выберите первый h2 и добавьте к его тексту ' (изменено)'
let subheading = document.input__1('input__2');
subheading.textContent = subheading.input__3 + " (изменено)";
Выбор нескольких элементов
Задание: найдите все параграфы на странице и добавьте к ним класс 'highlighted'. Используйте метод для выбора всех элементов, соответствующих селектору, и цикл для обработки коллекции элементов.
.highlighted {
background-color: yellow;
font-weight: bold;
}
<div class="article">
<h2>Статья</h2>
<p>Первый параграф статьи.</p>
<p>Второй параграф с важной информацией.</p>
<p>Третий заключительный параграф.</p>
<div>Это не параграф, а div</div>
</div>
// Выберите все параграфы и добавьте им класс 'highlighted'
let paragraphs = document.input__1('input__2');
paragraphs.input__3((paragraph) => {
paragraph.input__4.input__5('highlighted');
});
Вложенные селекторы
Задание: найдите все ссылки, находящиеся внутри элемента с классом 'navigation', и измените их цвет на красный. Используйте комбинированный CSS-селектор и querySelectorAll.
<nav class="navigation">
<ul>
<li><a href="#">Главная</a></li>
<li><a href="#">О нас</a></li>
<li><a href="#">Услуги</a></li>
</ul>
</nav>
<div class="content">
<p>Текст с <a href="#">ссылкой</a>, которая не должна быть затронута.</p>
</div>
// Выберите все ссылки внутри элемента .navigation и измените их цвет
let navLinks = document.querySelectorAll('input__1');
navLinks.input__2((link) => {
link.input__3.input__4 = "input__5";
});
Селектор по атрибуту
Задание: найдите все изображения с атрибутом alt и выведите значение этого атрибута в консоль. Используйте селектор по атрибуту и метод querySelectorAll.
<div class="gallery">
<img src="https://naytikurs.ru/assets/uploads/2025/01/java-1-700x525.png" alt="Java логотип">
<img src="https://naytikurs.ru/assets/uploads/2025/02/mashinnoe-obuchenie-dlya-nachinayushhih-700x700.png" alt="Машинное обучение">
<img src="https://naytikurs.ru/assets/uploads/2025/02/dengi-slava-i-kod-gid-po-samym-goryachim-it-professiyam-2025-dlya-teh-kto-hochet-byt-na-volne-700x525.png">
</div>
// Выберите все изображения с атрибутом alt и выведите значение атрибута
let imagesWithAlt = document.querySelectorAll('input__1');
imagesWithAlt.forEach((img) => {
let altValue = img.input__2('input__3');
console.log(input__4);
});
Комбинированные селекторы
Задание: найдите все параграфы с классом 'important', которые находятся внутри элемента с id 'article', и добавьте им красную рамку. Используйте комбинированный селектор и метод querySelectorAll.
<div id="article">
<h2>Важная статья</h2>
<p>Обычный параграф.</p>
<p class="important">Важный параграф в статье.</p>
<p class="important">Еще один важный параграф.</p>
</div>
<div>
<p class="important">Этот важный параграф находится вне статьи.</p>
</div>
// Выберите все параграфы с классом 'important' внутри элемента с id 'article'
let importantParagraphs = document.querySelectorAll('input__1');
importantParagraphs.forEach((paragraph) => {
paragraph.style.input__2 = "input__3";
});
Селектор потомков
Задание: найдите все ссылки, которые являются прямыми потомками элементов списка, и добавьте им класс 'nav-link'. Используйте селектор прямых потомков и метод querySelectorAll.
.nav-link {
color: blue;
font-weight: bold;
text-decoration: none;
}
<nav>
<ul>
<li><a href="#">Главная</a></li>
<li><a href="#">О нас</a></li>
<li>
<span><a href="#">Вложенная ссылка</a></span>
</li>
</ul>
</nav>
// Выберите все ссылки, которые являются прямыми потомками элементов списка
let directLinks = document.querySelectorAll('input__1');
directLinks.forEach((link) => {
link.input__2.input__3('input__4');
});
Селектор с псевдоклассом
Задание: найдите первый элемент списка и последний элемент списка, и добавьте им разные классы. Используйте селекторы с псевдоклассами :first-child и :last-child.
.first-item {
color: green;
font-weight: bold;
}
.last-item {
color: red;
font-style: italic;
}
<ul class="menu">
<li>Первый пункт</li>
<li>Второй пункт</li>
<li>Третий пункт</li>
<li>Четвертый пункт</li>
<li>Пятый пункт</li>
</ul>
// Выберите первый и последний элементы списка и добавьте им классы
let firstItem = document.querySelector('input__1');
let lastItem = document.querySelector('input__2');
firstItem.classList.add('input__3');
lastItem.classList.add('input__4');
Выбор элемента по нескольким классам
Задание: найдите все элементы, которые имеют одновременно классы 'item' и 'active', и измените их цвет текста на зеленый. Используйте селектор по нескольким классам и метод querySelectorAll.
<div class="container">
<div class="item">Обычный элемент</div>
<div class="item active">Активный элемент</div>
<div class="active">Только активный</div>
<div class="item active special">Активный специальный элемент</div>
</div>
// Выберите все элементы с классами 'item' и 'active' и измените их цвет текста
let activeItems = document.querySelectorAll('input__1');
activeItems.forEach((item) => {
item.input__2.input__3 = "input__4";
});
Соседний селектор
Задание: найдите все параграфы, которые следуют непосредственно за заголовками h2, и добавьте им класс 'intro'. Используйте соседний селектор и метод querySelectorAll.
.intro {
font-style: italic;
color: #555;
border-left: 3px solid #ccc;
padding-left: 10px;
}
<article>
<h1>Основной заголовок</h1>
<p>Этот параграф не должен быть выбран.</p>
<h2>Подзаголовок 1</h2>
<p>Этот параграф следует за h2 и должен быть выбран.</p>
<p>Этот параграф не должен быть выбран.</p>
<h2>Подзаголовок 2</h2>
<p>Этот параграф также следует за h2 и должен быть выбран.</p>
</article>
// Выберите все параграфы, которые следуют непосредственно за h2
let introParagraphs = document.querySelectorAll('input__1');
introParagraphs.forEach((paragraph) => {
paragraph.input__2.input__3('input__4');
});
Селектор по атрибуту со значением
Задание: найдите все ссылки, у которых атрибут target имеет значение '_blank', и добавьте им класс 'external'. Используйте селектор по атрибуту со значением и метод querySelectorAll.
.external::after {
content: " ↗";
color: red;
}
<div class="links">
<a href="https://example.com">Обычная ссылка</a>
<a href="https://example.com" target="_blank">Внешняя ссылка 1</a>
<a href="https://another-site.com" target="_blank">Внешняя ссылка 2</a>
<a href="page.html" target="_self">Внутренняя ссылка</a>
</div>
// Выберите все ссылки с target="_blank" и добавьте им класс 'external'
let externalLinks = document.querySelectorAll('input__1');
externalLinks.input__2((link) => {
link.classList.input__3('input__4');
});
Селектор по части значения атрибута
Задание: найдите все изображения, у которых в пути (атрибут src) содержится слово 'it-professiyam', и добавьте им класс 'it-image'. Используйте селектор по части значения атрибута и метод querySelectorAll.
.it-image {
border: 2px dashed blue;
padding: 5px;
}
<div class="gallery">
<img src="https://naytikurs.ru/assets/uploads/2025/01/java-1-700x525.png" alt="Java">
<img src="https://naytikurs.ru/assets/uploads/2025/02/dengi-slava-i-kod-gid-po-samym-goryachim-it-professiyam-2025-dlya-teh-kto-hochet-byt-na-volne-700x525.png" alt="IT профессии">
<img src="https://naytikurs.ru/assets/uploads/2025/02/mashinnoe-obuchenie-dlya-nachinayushhih-700x700.png" alt="Машинное обучение">
<img src="https://naytikurs.ru/assets/uploads/2025/02/ne-kodom-edinym-6-it-professij-dlya-teh-kto-ne-druzhit-s-programmirovaniem-700x525.png" alt="IT без кода">
</div>
// Выберите все изображения, содержащие 'it-professiyam' в src, и добавьте им класс 'it-image'
let itImages = document.querySelectorAll('input__1');
itImages.forEach((image) => {
image.input__2.input__3('input__4');
});
Универсальный селектор
Задание: найдите все элементы внутри контейнера с классом 'box', и добавьте им обводку. Используйте универсальный селектор в сочетании с другими селекторами и метод querySelectorAll.
<div class="container">
<div class="box">
<h2>Заголовок в боксе</h2>
<p>Параграф в боксе</p>
<span>Span в боксе</span>
<a href="#">Ссылка в боксе</a>
</div>
<p>Параграф вне бокса</p>
</div>
// Выберите все элементы внутри контейнера с классом 'box' и добавьте им обводку
let boxElements = document.querySelectorAll('input__1');
boxElements.forEach((element) => {
element.style.input__2 = "input__3";
});
Селекторы по состоянию
Задание: найдите все отмеченные (checked) флажки на странице и выведите значения их атрибутов 'value' в консоль. Используйте селектор с псевдоклассом :checked и метод querySelectorAll.
<form>
<div>
<input type="checkbox" id="option1" value="HTML" checked>
<label for="option1">HTML</label>
</div>
<div>
<input type="checkbox" id="option2" value="CSS">
<label for="option2">CSS</label>
</div>
<div>
<input type="checkbox" id="option3" value="JavaScript" checked>
<label for="option3">JavaScript</label>
</div>
<div>
<input type="checkbox" id="option4" value="PHP">
<label for="option4">PHP</label>
</div>
</form>
// Выберите все отмеченные флажки и выведите их значения
let checkedBoxes = document.querySelectorAll('input__1');
checkedBoxes.forEach((checkbox) => {
console.log(checkbox.input__2);
});