JS об'єкт HTMLCollection


HTMLCollection в JavaScript

HTMLCollection - це об'єкт у JavaScript, який представляє колекцію елементів DOM, доступних за індексом або ім'ям. Типово ви зіткнетеся з HTMLCollection при використанні таких методів DOM, як document.getElementsByTagName або element.children.

Приклад:

let divs = document.getElementsByTagName("div");
console.log(divs instanceof HTMLCollection);  // виведе true

У цьому прикладі ми отримали всі елементи div з документа у вигляді HTMLCollection.

Доступ до елементів

Ви можете отримати доступ до елементів колекції за допомогою індекса, так само як і у масивів.

let firstDiv = divs[0];  // отримуємо перший елемент div з колекції

Перебір елементів

Незважаючи на те, що HTMLCollection не є масивом, ви можете використовувати цикл for для перебору його елементів:

for (let i = 0; i < divs.length; i++) {
    console.log(divs[i]);  // виводить кожен елемент div
}

Властивість length

HTMLCollection має властивість length, яка повертає кількість елементів у колекції:

let totalDivs = divs.length;  // отримуємо кількість елементів div на сторінці
console.log(totalDivs);

Метод namedItem

Цей метод дозволяє отримати елемент з HTMLCollection за ім'ям його атрибуту name або id.

let element = divs.namedItem("someId");
console.log(element);  // виводить елемент з id "someId" або null, якщо такого елемента немає

Живі колекції

HTMLCollection - це так звана "жива" колекція, що означає, що вона автоматично оновлюється при зміні DOM. Якщо ви видаляєте або додаєте елементи на сторінку, колекція буде автоматично відображати ці зміни.

let divs = document.getElementsByTagName("div");
console.log(divs.length);  // припустимо, що виведе 5

// додаємо новий div на сторінку
let newDiv = document.createElement("div");
document.body.appendChild(newDiv);

console.log(divs.length);  // виведе 6, оскільки колекція автоматично оновлена
автор: Bond

Порада

Хоча HTMLCollection схожий на масив, він не має багатьох корисних методів масивів, таких як forEach, map тощо. Якщо вам потрібно використовувати ці методи, рекомендується перетворити HTMLCollection на справжній масив за допомогою Array.from().

автор: Bond
Порада

Намагайтеся не модифікувати DOM під час ітерації через HTMLCollection. Через те, що це жива колекція, зміни в DOM можуть вплинути на вашу ітерацію та призвести до непередбачуваних результатів. Замість цього зберігайте потрібні зміни та застосовуйте їх після завершення ітерації.

автор: Bond
Нотатка

HTMLCollection дозволяє отримувати елементи не тільки за індексом, але й за ім'ям за допомогою методу namedItem. Але пам'ятайте, що це працює лише для елементів, які мають атрибут name або id.

автор: Bond
Нотатка

HTMLCollection не дозволяє прямо модифікувати свої елементи, наприклад, ви не можете додати або видалити елемент з колекції. Замість цього, ви маєте модифікувати справжній DOM.

автор: Bond
Нотатка

Ви можете легко перетворити HTMLCollection на масив для використання всіх доступних методів масивів:

let divArray = Array.from(divs);
divArray.forEach(div => console.log(div));  // використовуємо метод forEach для масивів
автор: Bond

Синтаксис

let elements = document.getElementsByTagName(tagName);

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 1 1 8 12 8
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1

Приклади

+ запропонувати свій приклад у пісочниці

Якщо вам потрібно швидко змінити стиль для всіх елементів певного типу, наприклад, для всіх параграфів, ви можете використовувати HTMLCollection.

В цьому прикладі ми змінили колір тексту всіх параграфів на синій.

HTML

<p>перший абзац</p>
<p>другий абзац</p>

JS

let paragraphs = document.getElementsByTagName('p');
for (let i = 0; i < paragraphs.length; i++) {
    paragraphs[i].style.color = 'blue';
}
автор: Bond

Якщо на вашій сторінці є багато елементів із певним класом, які вам потрібно видалити, ви також можете використовувати HTMLCollection.

Тут ми видаляємо всі елементи з класом "unwanted". Ми використовуємо цикл while, оскільки HTMLCollection є "живою" колекцією, і її розмір зменшується після кожного видалення.

HTML

<div class="unwanted">перший елемент</div>
<div class="unwanted">другий елемент</div>

JS

let unwantedElements = document.getElementsByClassName('unwanted');
while(unwantedElements[0]) {
    unwantedElements[0].parentNode.removeChild(unwantedElements[0]);
}
автор: Bond

HTMLCollection може бути корисним, коли вам потрібно працювати із формами та їх елементами.

Цей приклад проходить через всі елементи форми і виводить їх імена та значення.

HTML

<form name="myForm">
    <input type="text" name="login" value="лесь">
    <input type="password" name="pass" value="таємниця">
</form>

JS

let form = document.forms['myForm'];
let formElements = form.elements;

for (let i = 0; i < formElements.length; i++) {
    console.log(formElements[i].name + ': ' + formElements[i].value);
}
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід