Наповнення JS розділу

Добридень, Пані та Панове, завдяки вам вдалося зібрати більше 19тис грн з необхідних 15тис на впровадження JS розділу.

JS розділ вже впроваджено - переходимо до його наповнення і почнемо бігти довгий марафон, адже JS має більше 1100 різноманітних методів, властивостей, подій і т.д., які необхідно описати.

Будемо працювати, і вдень, і вночі, щоб орієнтовно взимку закінчити наповнювати JS розділ!

Ви також можете допомогти нам в цьому. Долучайтеся до нашої спільноти в дискорді - ставайте її частиною і допомагайте нашому розвитку.

Також, підтримуйте нас матеріально.

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

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

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

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

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

Якщо ми отримаємо перший елемент <p> та спробуємо отримати його наступний вузол-сусід за допомогою nextSibling, ми отримаємо вузол коментаря:

const firstParagraph = document.querySelector('#parent > p');
const nextNode = firstParagraph.nextSibling;
console.log(nextNode); // <!-- Коментар -->

Щоб отримати наступний елемент, а не текстовий вузол або коментар, ми можемо використати властивість nextElementSibling. Ця властивість повертає наступний елемент-сусід, ігноруючи текстові вузли та коментарі:

const firstParagraph = document.querySelector('#parent > p');
const nextElement = firstParagraph.nextElementSibling;
console.log(nextElement); // <span>Текстовий вузол</span>

Властивість nextSibling часто використовується в циклах для обходу всіх вузлів-сусідів. Наприклад, щоб вивести всі елементи <p> у батьківському елементі #parent, ми можемо використати такий код:

const parentElement = document.querySelector('#parent');
let currentNode = parentElement.firstChild;

while (currentNode) {
  if (currentNode.nodeType === Node.ELEMENT_NODE && currentNode.nodeName === 'P') {
    console.log(currentNode.textContent);
  }
  currentNode = currentNode.nextSibling;
}

У цьому прикладі ми використовуємо firstChild для отримання першого дочірнього вузла батьківського елемента, а потім ітеруємо через всі вузли-сусіди за допомогою циклу while та властивості nextSibling. Ми перевіряємо, чи є поточний вузол елементом <p>, і якщо так, виводимо його текстовий вміст.

Властивість nextSibling також корисна для вставки нових елементів у DOM. Наприклад, щоб вставити новий елемент <span> після першого елемента <p> у батьківському елементі #parent, ми можемо використати такий код:

const parentElement = document.querySelector('#parent');
const firstParagraph = parentElement.firstElementChild;
const newSpan = document.createElement('span');
newSpan.textContent = 'Новий елемент';

parentElement.insertBefore(newSpan, firstParagraph.nextSibling);

У цьому прикладі ми створюємо новий елемент <span> за допомогою document.createElement('span') та встановлюємо його текстовий вміст. Потім ми використовуємо метод insertBefore на батьківському елементі, передаючи новий елемент newSpan та firstParagraph.nextSibling як другий аргумент. Це вставить новий елемент <span> безпосередньо після першого елемента <p>.

Крім того, властивість nextSibling може бути корисною для зміни стилів або маніпуляції із сусідніми вузлами. Наприклад, щоб змінити колір тексту всіх елементів <p> після першого елемента <p> у батьківському елементі #parent, ми можемо використати такий код:

const parentElement = document.querySelector('#parent');
let currentNode = parentElement.firstElementChild.nextElementSibling;

while (currentNode) {
  if (currentNode.nodeName === 'P') {
    currentNode.style.color = 'red';
  }
  currentNode = currentNode.nextElementSibling;
}

У цьому прикладі ми починаємо з наступного елемента після першого елемента <p> за допомогою firstElementChild.nextElementSibling. Потім ми ітеруємо через всі наступні елементи-сусіди за допомогою циклу while та властивості nextElementSibling. Якщо поточний вузол є елементом <p>, ми змінюємо колір його тексту на червоний.

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

Порада:

Якщо вам потрібно обійти лише елементи, використовуйте властивість nextElementSibling замість nextSibling. Це дозволить уникнути непотрібних текстових вузлів та коментарів під час обходу. Наприклад, щоб змінити стиль усіх елементів <p> після першого елемента <p>, можна використати цикл з nextElementSibling.

Порада:

При вставці нового вузла в DOM, використовуйте метод insertBefore разом з nextSibling для вказання місця вставки. Наприклад, щоб вставити новий елемент після певного елемента, можна передати nextSibling цього елемента як другий аргумент у insertBefore.

const newElement = document.createElement('div');
const existingElement = document.querySelector('#myElement');
existingElement.parentNode.insertBefore(newElement, existingElement.nextSibling);
Порада:

Будьте обережні при обході вузлів за допомогою nextSibling, оскільки структура DOM може змінитися під час обходу. Щоб уникнути помилок, зберігайте посилання на наступний вузол перед виконанням будь-яких операцій з поточним вузлом. Наприклад:

let currentNode = parentNode.firstChild;
while (currentNode) {
  const nextNode = currentNode.nextSibling; // Зберігаємо посилання на наступний вузол
  // Виконуємо операції з currentNode
  currentNode = nextNode; // Переходимо до наступного вузла
}

Синтаксис

Element.nextSibling

Значення

Return

Переглядачі

Переглядач

1

1

1.1

7

12

Переглядач

4.4

18

4

1

Переглядач

-

-

Приклади


У цьому прикладі ми маємо список елементів та кнопки для переходу між ними. Властивість nextSibling використовується для отримання наступного елемента списку, а previousElementSibling - для отримання попереднього елемента.

При завантаженні сторінки перший елемент списку стає активним. Кнопки "Наступний елемент" та "Попередній елемент" дозволяють переходити між елементами списку, використовуючи властивості nextSibling та previousElementSibling відповідно.

Коли користувач натискає кнопку "Наступний елемент", скрипт перевіряє, чи існує наступний елемент за допомогою activeElement.nextElementSibling. Якщо наступний елемент існує, поточний активний елемент втрачає клас active, а наступний елемент отримує цей клас та відображається як поточний у полі "Поточний елемент".

Аналогічно, при натисканні кнопки "Попередній елемент", скрипт перевіряє наявність попереднього елемента за допомогою activeElement.previousElementSibling. Якщо попередній елемент існує, поточний активний елемент втрачає клас active, а попередній елемент отримує цей клас та відображається як поточний.

Важливо зазначити, що у цьому прикладі використовується nextElementSibling та previousElementSibling замість nextSibling та previousSibling, оскільки ці властивості ігнорують текстові вузли між елементами, що спрощує обробку та робить код більш зрозумілим.

У цьому прикладі ми використовуємо властивість nextSibling для переходу до наступного елемента-сусіда у структурі DOM. Це простий спосіб перейти до наступного вузла без необхідності явно отримувати батьківський вузол.

// Отримуємо елемент з ідентифікатором 'start'
const startElement = document.getElementById('start');

// Отримуємо наступний елемент-сусід
const nextSibling = startElement.nextSibling;

// Виводимо вузол до консолі
console.log(nextSibling);

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

// Отримуємо елемент з ідентифікатором 'parent'
const parentElement = document.getElementById('parent');

// Отримуємо першого дочірнього елемента
let currentChild = parentElement.firstChild;

// Проходимо по всіх дочірніх елементах
while (currentChild) {
  // Перевіряємо, чи це елемент (nodeType === 1)
  if (currentChild.nodeType === 1) {
    // Виконуємо дії з елементом
    console.log(`Елемент: ${currentChild.tagName}`);
  }

  // Переходимо до наступного сусіда
  currentChild = currentChild.nextSibling;
}