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 забезпечує гнучкість та контроль над структурою веб-сторінки.
| Порада: | При обході структури DOM, використовуйте
|
| Порада: | Якщо ви створюєте нові вузли динамічно, використовуйте |
| Порада: | При видаленні вузлів з DOM, будьте обережні з використанням
|
Синтаксис
Element.nodeType
Значення
Return
Переглядачі
| Переглядач | |||||
|---|---|---|---|---|---|
1 |
1 |
1.1 |
7 |
12 |
| Переглядач | ||||
|---|---|---|---|---|
4.4 |
18 |
4 |
1 |
| Переглядач | ||
|---|---|---|
- |
- |
Приклади
У цьому прикладі ми маємо контейнер з різними елементами (div, span, a) та текстовим вузлом. При натисканні на будь-який з цих елементів або текст ми визначаємо його тип за допомогою властивості nodeType і виводимо це значення в елемент #output.
Властивість nodeType повертає числове значення, яке відповідає типу вузла. Ми використовуємо оператор switch для визначення назви типу вузла на основі його числового значення. Для зручності ми використовуємо константи Node.ELEMENT_NODE (1) та Node.TEXT_NODE (3), які представляють елемент та текстовий вузол відповідно.
У цьому прикладі ми демонструємо використання властивості 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>
У цьому прикладі ми демонструємо використання властивості 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>
