JavaScript - Списки узлов DOM

Введение в списки узлов DOM

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

JavaScript - DOM Node Lists

Что такое список узлов DOM?

Прежде чем мы углубимся, давайте начнем с азов. Представьте себе веб-страницу как генеалогическое древо. DOM (Document Object Model) - это как генеалогическое древо для веб-страниц. Каждый элемент на странице - будь то абзац, кнопка или изображение - является членом этой семьи, или, если говорить техническим языком, "узлом".

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

Пример 1: Получение списка узлов

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

<div>
<p>Абзац 1</p>
<p>Абзац 2</p>
<p>Абзац 3</p>
</div>

<script>
let paragraphs = document.querySelectorAll('p');
console.log(paragraphs);
</script>

В этом примере querySelectorAll('p') возвращает список узлов, содержащий все <p> элементы. Если вы запустите это в консоли вашего браузера, вы увидите что-то вроде:

NodeList(3) [p, p, p]

Это告诉我们, что у нас есть список узлов, содержащий три элемента абзаца.

Работа со списками узлов

Теперь, когда у нас есть список узлов, давайте посмотрим, что мы можем с ним сделать!

Пример 2: Прохождение по списку узлов

let paragraphs = document.querySelectorAll('p');

paragraphs.forEach((paragraph, index) => {
console.log(`Абзац ${index + 1}: ${paragraph.textContent}`);
});

Этот код выведет:

Абзац 1: Абзац 1
Абзац 2: Абзац 2
Абзац 3: Абзац 3

Здесь мы используем метод forEach для прохождения по каждому абзацу в нашем списке узлов. Это как если бы мы прошли по списку гостей на вечеринке и поприветствовали каждого гостя лично!

Магия живых и статичных списков узлов

Теперь, где事情 становятся интересными. Списки узлов могут быть либо "живыми", либо "статичными".

Живой список узлов - это как магический список гостей, который обновляется сам, когда люди приходят или уходят с вечеринки. В contrast, статичный список узлов - это как snapshot списка гостей на определенный момент - он не изменяется, даже если arrive новые гости.

Пример 3: Живой список узлов

<ul id="guestList">
<li>Алиса</li>
<li>Боб</li>
</ul>

<script>
let guests = document.getElementsByTagName('li');
console.log(guests.length); // Выводит: 2

let newGuest = document.createElement('li');
newGuest.textContent = 'Чарли';
document.getElementById('guestList').appendChild(newGuest);

console.log(guests.length); // Выводит: 3
</script>

В этом примере getElementsByTagName возвращает живой список узлов. Когда мы добавляем Чарли в список, наш список узлов guests автоматически обновляется!

Пример 4: Статичный список узлов

<ul id="guestList">
<li>Алиса</li>
<li>Боб</li>
</ul>

<script>
let guests = document.querySelectorAll('li');
console.log(guests.length); // Выводит: 2

let newGuest = document.createElement('li');
newGuest.textContent = 'Чарли';
document.getElementById('guestList').appendChild(newGuest);

console.log(guests.length); //прежнему выводит: 2
</script>

Здесь querySelectorAll возвращает статичный список узлов. Даже после добавления Чарли, наш список узлов guests не изменяется. Это как если бы мы сделали фотографию списка гостей, и эта фотография не обновляется, когда arrive новые гости.

Разница между HTMLCollection и NodeList

Теперь давайте поговорим о двух cousins в семье DOM: HTMLCollection и NodeList. Они похожи, но у них есть свои уникальные особенности.

HTMLCollection

HTMLCollection всегда живой. Это как список гостей, который constantly обновляется.

let divs = document.getElementsByTagName('div'); // Возвращает HTMLCollection

NodeList

NodeList может быть либо живым, либо статичным, в зависимости от того, как он создается.

let paragraphs = document.querySelectorAll('p'); // Возвращает статичный NodeList
let childNodes = document.body.childNodes; // Возвращает живой NodeList

Вот таблица, резюмирующая их различия:

Feature HTMLCollection NodeList
Live/Static Always live Can be live or static
Content Only element nodes Can include all node types
Accessing items By name, id, or index Only by index
forEach method Not available Available

Заключение

И вот мы arrived к концу, друзья! Мы прошли через страну списков узлов DOM, от базовых концепций до нюансов живых и статичных списков. Помните, практика makes perfect. Попробуйте эти примеры, экспериментируйте с ними, и вскоре вы будете манипулировать веб-страницами как опытный разработчик!

Before we part ways, here's a little web developer joke for you: Why did the JavaScript developer wear glasses? Because he couldn't C#! (Get it? C Sharp? Okay, I'll see myself out...)

Keep coding, keep learning, and most importantly, keep having fun with JavaScript!

Credits: Image by storyset