JS властивість Element.nodeType


Загальний опис

nodeType є властивістю вузла в об'єктній моделі документа (DOM), що представляє тип вузла у вигляді числового коду. Ця властивість дозволяє визначити, чи є вузол елементом, атрибутом, текстовим вузлом, коментарем або одним з інших типів вузлів, що існують у DOM. Значення nodeType є константами, визначеними в об'єкті Element, і вони корисні для виконання різноманітних операцій з вузлами залежно від їх типу.

Найбільш поширені значення nodeType включають:

  • Node.ELEMENT_NODE (1) - вузол є елементом HTML, наприклад <div> або <p>.
  • Node.TEXT_NODE (3) - вузол є текстовим вузлом, що містить текстовий вміст елемента.
  • Node.COMMENT_NODE (8) - вузол є коментарем HTML.
  • Node.DOCUMENT_NODE (9) - вузол є коренем документа.

Розглянемо приклад використання nodeType. Нехай у нас є така структура HTML:

<div id="parent">
  <p>Перший параграф</p>
  <!-- Коментар -->
  <span>Текстовий вузол</span>
</div>

Ми можемо отримати доступ до вузлів DOM та перевірити їх nodeType за допомогою JavaScript:

const parentElement = document.querySelector('#parent');
const firstChild = parentElement.firstChild;
console.log(firstChild.nodeType); // 1 (Node.ELEMENT_NODE)

const secondChild = firstChild.nextSibling;
console.log(secondChild.nodeType); // 3 (Node.TEXT_NODE)

const thirdChild = secondChild.nextSibling;
console.log(thirdChild.nodeType); // 8 (Node.COMMENT_NODE)

У цьому прикладі ми отримуємо батьківський елемент #parent та його перший, другий та третій дочірні вузли. Потім ми виводимо nodeType для кожного вузла, що дає нам 1 (Node.ELEMENT_NODE) для першого елемента <p>, 3 (Node.TEXT_NODE) для текстового вузла між елементами <p> та <span>, та 8 (Node.COMMENT_NODE) для коментаря HTML.

Властивість nodeType часто використовується в циклах для обходу та маніпуляції вузлами DOM на основі їх типу. Наприклад, щоб видалити всі коментарі з батьківського елемента #parent, ми можемо використати такий код:

const parentElement = document.querySelector('#parent');
const childNodes = parentElement.childNodes;

for (let i = 0; i < childNodes.length; i++) {
  const child = childNodes[i];
  if (child.nodeType === Node.COMMENT_NODE) {
    parentElement.removeChild(child);
    i--; // Зменшуємо i, оскільки довжина childNodes зменшилася
  }
}

У цьому прикладі ми отримуємо всі дочірні вузли батьківського елемента #parent за допомогою childNodes. Потім ми ітеруємо через ці вузли за допомогою циклу for та перевіряємо nodeType кожного вузла. Якщо nodeType дорівнює Node.COMMENT_NODE, ми видаляємо цей вузол з батьківського елемента за допомогою removeChild. Після видалення вузла ми зменшуємо лічильник i на 1, оскільки довжина childNodes зменшилася після видалення вузла.

Властивість nodeType також може бути корисною для створення нових вузлів DOM динамічно. Наприклад, щоб створити новий текстовий вузол та додати його до елемента <p>, ми можемо використати такий код:

const paragraph = document.createElement('p');
const textNode = document.createTextNode('Новий текстовий вузол');

paragraph.appendChild(textNode);
console.log(textNode.nodeType); // 3 (Node.TEXT_NODE)

У цьому прикладі ми створюємо новий елемент <p> за допомогою document.createElement('p') та новий текстовий вузол за допомогою document.createTextNode('Новий текстовий вузол'). Потім ми додаємо текстовий вузол до елемента <p> за допомогою appendChild. Після цього ми можемо перевірити nodeType створеного текстового вузла, що дасть нам 3 (Node.TEXT_NODE).

Крім того, властивість nodeType може бути корисною для перевірки типу вузла перед виконанням певних операцій. Наприклад, якщо ми хочемо отримати текстовий вміст елемента, але не хочемо, щоб він включав текстові вузли, ми можемо перевірити nodeType перед доступом до textContent:

const element = document.querySelector('#myElement');
let content = '';

for (let i = 0; i < element.childNodes.length; i++) {
  const node = element.childNodes[i];
  if (node.nodeType === Node.TEXT_NODE) {
    content += node.textContent;
  }
}

console.log(content);

У цьому прикладі ми ітеруємо через всі дочірні вузли елемента #myElement за допомогою childNodes. Для кожного вузла ми перевіряємо, чи його nodeType дорівнює Node.TEXT_NODE. Якщо так, ми додаємо його textContent до змінної content. Після циклу ми виводимо content, що містить текстовий вміст елемента без інших типів вузлів.

Підсумовуючи, властивість nodeType є корисним інструментом для ідентифікації типу вузла в DOM та виконання різноманітних операцій на основі цієї інформації. Вона дозволяє обходити та маніпулювати вузлами DOM залежно від їх типу, створювати нові вузли динамічно та перевіряти тип вузла перед виконанням певних операцій. Разом з іншими властивостями та методами DOM, nodeType забезпечує гнучкість та контроль над структурою веб-сторінки.

автор: Bond

Порада

Якщо ви створюєте нові вузли динамічно, використовуйте nodeType для перевірки типу створеного вузла після його створення. Це допоможе впевнитись, що вузол був створений правильно, і дозволить виконати необхідні операції з ним відповідно до його типу.

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

При обході структури DOM, використовуйте nodeType для фільтрації вузлів за типом. Це особливо корисно, коли ви хочете виконати певні операції лише з певними типами вузлів, наприклад, лише з елементами або лише з текстовими вузлами. Наприклад:

for (let node of parentNode.childNodes) {
  if (node.nodeType === Node.ELEMENT_NODE) {
    // Виконуємо операції лише з елементами
  }
}
автор: Bond
Порада

При видаленні вузлів з DOM, будьте обережні з використанням nodeType. Після видалення вузла довжина childNodes може змінитися, що може призвести до помилок під час обходу. Щоб уникнути цього, зберігайте посилання на наступний вузол перед видаленням поточного або використовуйте цикл while замість for.

let currentNode = parentNode.firstChild;
while (currentNode) {
  const nextNode = currentNode.nextSibling;
  if (currentNode.nodeType === Node.COMMENT_NODE) {
    parentNode.removeChild(currentNode);
  }
  currentNode = nextNode;
}
автор: Bond

Синтаксис

Element.nodeType

Переглядачі

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

Приклади

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

У цьому прикладі ми демонструємо використання властивості nodeType для перевірки типу вузла перед виконанням певних дій. Ми створюємо форму з текстовим полем та кнопкою "Додати". При натисканні на кнопку ми перевіряємо, чи є поточний елемент текстовим вузлом, і якщо так, то додаємо введене значення до списку.

<form>
  <input type="text" id="newItem" placeholder="Введіть новий елемент">
  <button type="button" id="addItem">Додати</button>
</form>
<ul id="itemList"></ul>

<script>
const form = document.querySelector('form');
const input = document.getElementById('newItem');
const addButton = document.getElementById('addItem');
const itemList = document.getElementById('itemList');

addButton.addEventListener('click', () => {
  const inputValue = input.value.trim();
  if (inputValue !== '') {
    const newItem = document.createElement('li');
    newItem.textContent = inputValue;
    itemList.appendChild(newItem);
    input.value = '';
  }
});

form.addEventListener('click', (event) => {
  const target = event.target;
  if (target.nodeType === Node.TEXT_NODE) {
    // Якщо клік відбувся на текстовому вузлі, виконайте певні дії
    console.log('Клік на текстовому вузлі');
  }
});
</script>
автор: Bond

У цьому прикладі ми демонструємо використання властивості nodeType для визначення типу вузла DOM. Ми створюємо кнопку, при натисканні на яку виводиться тип вузла body у консоль.

<button id="getNodeType">Отримати тип вузла</button>

<script>
const button = document.getElementById('getNodeType');

button.addEventListener('click', () => {
  const bodyNode = document.body;
  const nodeType = bodyNode.nodeType; // nodeType буде рівним 1 (Node.ELEMENT_NODE)
  console.log(`Тип вузла: ${nodeType}`);
});
</script>
автор: Bond

У цьому прикладі ми маємо контейнер з різними елементами (div, span, a) та текстовим вузлом. При натисканні на будь-який з цих елементів або текст ми визначаємо його тип за допомогою властивості nodeType і виводимо це значення в елемент #output.

Властивість nodeType повертає числове значення, яке відповідає типу вузла. Ми використовуємо оператор switch для визначення назви типу вузла на основі його числового значення. Для зручності ми використовуємо константи Node.ELEMENT_NODE (1) та Node.TEXT_NODE (3), які представляють елемент та текстовий вузол відповідно.

автор: 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`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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