JavaScript - DOM Collections

Здравствуйте, стремящиеся к программированию! Сегодня мы окунемся в fascинирующий мир DOM Collections в JavaScript. Не волнуйтесь, если вы новички в программировании - я буду вести вас через это путешествие шаг за шагом, так же, как я делал это для countless студентов на протяжении моих лет преподавания. Так что возьмите кружку кофе (или ваш любимый напиток) и начнем!

JavaScript - DOM Collections

The HTMLCollection Object

Представьте, что вы находитесь в библиотеке и хотите найти все книги о JavaScript. Библиотекарь дает вам специальную тележку, содержащую все эти книги. В мире веб-разработки эта тележка похожа на HTMLCollection - коллекцию HTML-элементов, с которыми мы можем работать с помощью JavaScript.

Что такое HTMLCollection?

HTMLCollection - это объект, resembleющий список, который представляет коллекцию HTML-элементов на веб-странице. Он "живой", что означает, что он автоматически обновляется, когда изменяется базовый документ.

Давайте посмотрим на простой пример:

<div class="book">JavaScript Basics</div>
<div class="book">Advanced JavaScript</div>
<div class="book">DOM Manipulation</div>

<script>
let books = document.getElementsByClassName('book');
console.log(books);
console.log(books.length); // Вывод: 3
</script>

В этом примере books - это HTMLCollection, содержащий все элементы с классом "book". Свойство length говорит нам, сколько элементов находится в коллекции.

Доступ к элементам в HTMLCollection

Вы можете получить доступ к элементам в HTMLCollection так же, как и в массиве:

console.log(books[0].innerText); // Вывод: "JavaScript Basics"
console.log(books[1].innerText); // Вывод: "Advanced JavaScript"
console.log(books[2].innerText); // Вывод: "DOM Manipulation"

Однако помните, что HTMLCollection не совсем массив. Он resembleет массив, но не имеет всех методов, которые есть у массивов.

Циклический доступ через HTMLCollection

Чтобы итерировать через все элементы в HTMLCollection, вы можете использовать цикл for:

for (let i = 0; i < books.length; i++) {
console.log(books[i].innerText);
}

Или, если вы предпочитаете более современный подход, вы можете преобразовать HTMLCollection в массив и использовать методы массивов:

Array.from(books).forEach(book => {
console.log(book.innerText);
});

Collections of document Object and DOM Elements

Теперь, когда мы понимаем HTMLCollection, давайте рассмотрим некоторые распространенные способы создания коллекций DOM-элементов.

document.getElementsByTagName()

Этот метод возвращает HTMLCollection элементов с указанным именем тега.

<p>First paragraph</p>
<p>Second paragraph</p>
<p>Third paragraph</p>

<script>
let paragraphs = document.getElementsByTagName('p');
console.log(paragraphs.length); // Вывод: 3

for (let i = 0; i < paragraphs.length; i++) {
console.log(paragraphs[i].innerText);
}
</script>

document.getElementsByClassName()

Мы уже видели это раньше, но давайте углубимся немного:

<div class="fruit">Apple</div>
<div class="fruit">Banana</div>
<div class="fruit">Orange</div>

<script>
let fruits = document.getElementsByClassName('fruit');
console.log(fruits.length); // Вывод: 3

Array.from(fruits).forEach(fruit => {
console.log(fruit.innerText);
});
</script>

document.querySelectorAll()

Этот мощный метод возвращает NodeList (который resembles HTMLCollection) всех элементов, соответствующих CSS-селектору:

<ul>
<li class="item">Item 1</li>
<li class="item">Item 2</li>
<li class="item">Item 3</li>
</ul>

<script>
let items = document.querySelectorAll('ul .item');
console.log(items.length); // Вывод: 3

items.forEach(item => {
console.log(item.innerText);
});
</script>

Заметим, что в отличие от HTMLCollection, NodeList, возвращаемый querySelectorAll(), не "живой" и имеет встроенный метод forEach.

Сравнение методов коллекций

Вот удобная таблица, резюмирующая методы коллекций, которые мы обсуждали:

Метод Возвращает Живой? Сценарий использования
getElementsByTagName() HTMLCollection Да Когда вам нужны элементы определенного тега
getElementsByClassName() HTMLCollection Да Когда вам нужны элементы с определенным классом
querySelectorAll() NodeList Нет Когда вам нужны элементы, соответствующие CSS-селектору

Помните, "живой" означает, что коллекция автоматически обновляется при изменениях в DOM.

Заключение

И вот оно, дорогие студенты! Мы совершили путешествие по стране DOM Collections, от HTMLCollection до различных методов сбора DOM-элементов. Эти инструменты являются основополагающими для манипулирования веб-страницами с помощью JavaScript, позволяя вам выбирать и изменять элементы с легкостью.

По мере практики с этими концепциями вы найдете себя более комфортным в манипулировании DOM. Это как учиться играть на инструменте - сначала это может показаться сложным, но с практикой вы будете создавать красивые веб-симфонии в кратчайшие сроки!

Помните, ключ к maîtriser programming - это практика и好奇心. Не бойтесь экспериментировать с этими методами, пробовать разные сценарии и, самое главное, получайте удовольствие от программирования!

До下一次 встречи, счастливого кодирования!

Credits: Image by storyset