JavaScript виконання коду JavaScript підключення зовнішнього файлу JavaScript console.log JavaScript змінні і константи JavaScript типи даних JavaScript операції зі змінними JavaScript перетворення даних JavaScript масиви JavaScript умовні конструкції JavaScript цикли JavaScript функції JavaScript область видимості змінних JavaScript замикання і функції IIFE JavaScript Паттерн Модуль JavaScript рекурсивні функції JavaScript перевизначення функцій JavaScript hoisting JavaScript передача параметрів за значенням і за посиланням JavaScript стрілочні функції JavaScript ООП Object JavaScript ООП вкладені об'єкти і масиви в об'єктах JavaScript ООП перевірка наявності і перебір методів і властивостей JavaScript ООП об'єкти у функціях JavaScript ООП конструктори об'єктів JavaScript ООП розширення об'єктів. prototype JavaScript ООП інкапсуляція JavaScript ООП Функція як об'єкт. Методи call і apply JavaScript ООП спадкування JavaScript ООП Ключове слово this JavaScript ООП Object destructuring JavaScript ООП класи JavaScript ООП Date. Робота з датами JavaScript Об'єкт Math. математичні операції JavaScript Об'єкт Array. Робота з масивами JavaScript ООП об'єкт Number JavaScript String JavaScript String Об'єкт RegExp. Регулярні вирази JavaScript String Регулярні вирази в методах String JavaScript String Синтаксис регулярних виразів JavaScript Робота з браузером і BOM JavaScript діалогові вікна JavaScript Історія браузера. об'єкт history JavaScript об'єкт location JavaScript об'єкт navigator JavaScript таймери JavaScript DOM Введення JavaScript DOM Об'єкт document. Пошук елементів JavaScript DOM Властивості об'єкта document JavaScript DOM Об'єкт Node. Навігація по DOM JavaScript DOM Створення, додавання і видалення елементів веб-сторінки JavaScript DOM Об'єкт Element. управління елементами JavaScript DOM Зміна стилю елементів JavaScript події. Введення в обробку подій. JavaScript події обробники JavaScript події. об'єкт Event JavaScript події. поширення подій JavaScript події миші JavaScript події клавіатури JavaScript FORMS. Форми і їх елементи JavaScript FORMS. Кнопки JavaScript FORMS. текстові поля JavaScript FORMS. Прапорці та перемикачі JavaScript FORMS. Список select JavaScript JSON JavaScript зберігання даних. cookie JavaScript зберігання даних. Web Storage JavaScript Collection. Ітератори JavaScript Collection. Генератори JavaScript Collection. Множина Set JavaScript Collection. Map JavaScript Collection. WeakSet і WeakMap JavaScript AJAX. XMLHttpRequest JavaScript AJAX. Відправка даних JavaScript AJAX. Promise в Ajax-запитах

JavaScript DOM Об'єкт Node. Навігація по DOM


Кожен окремий вузол, будь то html-елемент, його атрибут або текст, в структурі DOM представлений об'єктом Node . Цей об'єкт надає ряд властивостей, за допомогою яких ми можемо отримати інформацію по даному сайті:

  • childNodes : містить колекцію дочірніх вузлів

  • firstChild : повертає перший дочірній вузол поточного вузла

  • lastChild : повертає останній дочірній вузол поточного вузла

  • previousSibling : повертає попередній елемент, який знаходиться на одному рівні з поточним

  • nextSibling : повертає наступний елемент, який знаходиться на одному рівні з поточним

  • ownerDocument : повертає кореневий вузол документа

  • parentNode : повертає елемент, який містить поточний вузол

  • nodeName : повертає ім'я вузла

  • nodeType : повертає тип вузла у вигляді числа

  • nodeValue : повертає або встановлює значення вузла у вигляді простого тексту

Перебираючи всі дочірні вузли елементу:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>

    <div class="article">
        <h3>Заголовок статті</h3>
        <p>Перший абзац</p>
        <p>Другий абзац</p>
    </div>

<script>

var articleDiv = document.querySelector("div.article");
var nodes = articleDiv.childNodes;

for(var i = 0; i < nodes.length; i++){
 
    var type = "";

    if(nodes[i].nodeType===1)
        type="елемент";
    else if(nodes[i].nodeType===2)
        type="атрибут";
    else if(nodes[i].nodeType===3)
        type="текст";
         
    console.log(nodes[i].nodeName + ": " + type);
}

</script>

</body>
</html>

За допомогою методу document.querySelector("div.article") вибираємо елемент div з класом article і пробігаємо по його дочірніх вузлах. І в циклі виводимо ім'я вузла і його тип за допомогою властивостей nodeName і nodeType . Кожному типу відповідає певне число:

NODETYPE

Тип вузла

1

елемент

2

атрибут

3

текст

Але незважаючи на те, що в блоці div на сторінці тільки три вузла: h3 і 2 параграфа, але консоль відобразить нам п'ять вузлів.

Справа в тому, що прогалини між вузлами також вважаються за окремі текстові вузли. Якби прогалин не було:

<div class="article"><h3>Заголовок статті</h3><p>Перший абзац</p><p>Другий абзац</p></div>

Тобто при переборі ми б виявили тільки три дочірніх вузла, як і очікувалося.


Навігація по вузлах

Використовуючи властивості nextSibling і previousSibling можна також пройтися по вузлах в прямому або зворотному порядку. Наприклад, для проходу по елементам на тій же сторінці ми могли б використовувати наступний код javascript:

var articleDiv = document.querySelector("div.article");
 
// отримуємо перший дочірній елемент
var node = articleDiv.firstChild;

console.log(node.nodeName);

// звертаємось до наступного вузла, поки він визначений

while((node = node.nextSibling) !== null){
    console.log(node.nodeName);
}

Тут все аналогічно, тільки в циклі ми звертаємося до наступного вузла, який знаходиться на одному рівні з поточним (або дочірньої  ланки). І результат буде таким й же.

Також можна перебрати ланки в зворотному порядку: спочатку отримуємо останній вузол, а потім звертаємося до попередньої дочірньої ланки:

var articleDiv = document.querySelector("div.article");
 
// отримуємо первший дочірній елемент

var node = articleDiv.lastChild;
console.log(node.nodeName);

// звертаємось до попередньої ланки, поки вона визначена

while((node = node.previousSibling) !== null){
    console.log(node.nodeName);
}

Наш партнер:
beta test mp3 playlist downloader