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

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

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

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

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

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

JS метод Element.isEqualNode()

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

isEqualNode() - це метод об'єкта Element в JavaScript, який використовується для перевірки, чи два вузли дерева документа є структурно ідентичними. Цей метод повертає логічне значення true, якщо вузли є ідентичними, і false в іншому випадку.

Основна сфера застосування методу isEqualNode() - порівняння вузлів дерева документа для визначення, чи вони мають однакову структуру, атрибути та вміст. Це може бути корисно в різних ситуаціях, таких як перевірка коректності маніпуляцій з DOM, тестування, валідація даних та інші випадки, коли потрібно порівнювати вузли.

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

Розглянемо приклад використання isEqualNode() з HTML-документом:

<div id="container">
  <p>Перший абзац</p>
  <p>Другий абзац</p>
</div>
const container = document.getElementById('container');
const firstP = container.firstElementChild;
const secondP = container.lastElementChild;

const newP = document.createElement('p');
newP.textContent = 'Другий абзац';

console.log(secondP.isEqualNode(newP)); // true

У цьому прикладі ми спочатку отримуємо вузли p з контейнера div. Потім ми створюємо новий вузол p з таким самим текстовим вмістом, як і другий абзац. Коли ми виконуємо isEqualNode() на другому абзаці та новому вузлі, метод повертає true, оскільки вони є структурно ідентичними.

Метод isEqualNode() також можна використовувати з XML-документами та іншими типами вузлів, такими як атрибути, коментарі та текстові вузли. Наприклад:

<?xml version="1.0"?>
<root>
  <child>Дочірній елемент</child>
</root>
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlString, "application/xml");
const rootNode = xmlDoc.documentElement;
const childNode = rootNode.firstElementChild;

const newChild = xmlDoc.createElement('child');
newChild.textContent = 'Дочірній елемент';

console.log(childNode.isEqualNode(newChild)); // true

У цьому прикладі ми створюємо XML-документ та порівнюємо існуючий дочірній вузол child з новим вузлом child, який має такий самий текстовий вміст. Метод isEqualNode() повертає true, оскільки вони є ідентичними.

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

Крім порівняння окремих вузлів, isEqualNode() також можна використовувати для перевірки рівності підструктур дерева документа. Наприклад, ви можете порівняти два фрагменти документа, щоб переконатися, що вони мають однакову структуру та вміст.

const fragment1 = document.createDocumentFragment();
const p1 = document.createElement('p');
p1.textContent = 'Перший абзац';
fragment1.appendChild(p1);

const fragment2 = document.createDocumentFragment();
const p2 = document.createElement('p');
p2.textContent = 'Перший абзац';
fragment2.appendChild(p2);

console.log(fragment1.isEqualNode(fragment2)); // true

У цьому прикладі ми створюємо два фрагменти документа, кожен з одним абзацом, і порівнюємо їх за допомогою isEqualNode(). Оскільки фрагменти мають ідентичну структуру та вміст, метод повертає true.

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

Порада:

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

Порада:

Ви можете використовувати isEqualNode() для порівняння не лише окремих вузлів, але й підструктур дерева документа, таких як фрагменти документа. Це може бути корисно для перевірки коректності маніпуляцій з DOM. Наприклад:

const fragment1 = document.createDocumentFragment();
// Додавання вузлів до fragment1

const fragment2 = document.createDocumentFragment();
// Додавання вузлів до fragment2

if (fragment1.isEqualNode(fragment2)) {
  console.log('Фрагменти ідентичні');
} else {
  console.log('Фрагменти відрізняються');
}
Порада:

Якщо вам потрібно більш гнучке порівняння вузлів, де деякі незначні відмінності можуть бути проігноровані, вам може знадобитися реалізувати власну логіку порівняння. Метод isEqualNode() є дуже точним і враховує навіть найменші деталі структури вузлів.

Синтаксис

isEqualNode(otherNode)

Параметри

*otherNode

Вузол для порівняння на рівність.

Return

boolean

Повертає булеве значення, яке дорівнює true, якщо два вузли рівні, або false, якщо ні.

Якщо otherNode дорівнює null, метод isEqualNode() завжди повертає false.

Переглядачі

Переглядач

1

1

3

12.1

12

Переглядач

4.4

18

4

1

Переглядач

-

-

Приклади


У цьому прикладі ми маємо два контейнери (#nodeContainer1 та #nodeContainer2), в яких будуть створені вузли для порівняння. Також є кнопка "Створити вузли" та кнопка "Перевірити рівність", яка спочатку вимкнена.

При натисканні на кнопку "Створити вузли" викликається функція createNodes(), яка створює два вузли <div> з однаковим текстовим вмістом ("Вузол 1") та додає їх до відповідних контейнерів. Після цього кнопка "Перевірити рівність" стає активною.

Коли користувач натискає на кнопку "Перевірити рівність", викликається функція checkNodeEquality(). Ця функція отримує перші дочірні вузли з кожного контейнера та використовує метод isEqualNode() для перевірки їхньої рівності. Результат перевірки виводиться у елемент <p> з ідентифікатором output.

Оскільки обидва вузли мають однаковий текстовий вміст, метод isEqualNode() повертає true, і на сторінці відображається повідомлення "Вузли рівні". Якщо вузли будуть відрізнятися за вмістом або атрибутами, метод поверне false, і буде відображено повідомлення "Вузли не рівні".

Цей приклад демонструє, як можна використовувати метод isEqualNode() для порівняння вузлів DOM. Користувач може взаємодіяти зі сторінкою, створюючи вузли та перевіряючи їхню рівність за допомогою кнопок.

У цьому прикладі ми створюємо два елементи <div> за допомогою методу document.createElement(). Потім ми присвоюємо їм однакові атрибути id та однаковий текстовий вміст. Після цього ми використовуємо метод isEqualNode() для перевірки, чи є ці два вузли рівними. Оскільки вони мають однакові атрибути та вміст, метод повертає true.

// Створюємо два елементи div
const div1 = document.createElement('div');
const div2 = document.createElement('div');

// Присвоюємо їм однакові атрибути та вміст
div1.setAttribute('id', 'myDiv');
div1.textContent = 'Hello, World!';

div2.setAttribute('id', 'myDiv');
div2.textContent = 'Hello, World!';

// Перевіряємо, чи є вузли рівними
console.log(div1.isEqualNode(div2)); // true

У цьому прикладі ми створюємо функцію areTreesEqual, яка приймає два кореневі вузли та перевіряє, чи є їхні дерева вузлів рівними. Функція використовує рекурсивний підхід для перевірки кожного вузла та його дочірніх вузлів.

function areTreesEqual(rootNode1, rootNode2) {
  // Базовий випадок: перевірка на null
  if (!rootNode1 && !rootNode2) {
    return true;
  }

  // Якщо один з вузлів є null, а інший ні, вони не рівні
  if (!rootNode1 || !rootNode2) {
    return false;
  }

  // Перевіряємо, чи є вузли рівними
  if (!rootNode1.isEqualNode(rootNode2)) {
    return false;
  }

  // Рекурсивно перевіряємо дочірні вузли
  const childNodes1 = rootNode1.childNodes;
  const childNodes2 = rootNode2.childNodes;

  if (childNodes1.length !== childNodes2.length) {
    return false;
  }

  for (let i = 0; i < childNodes1.length; i++) {
    if (!areTreesEqual(childNodes1[i], childNodes2[i])) {
      return false;
    }
  }

  return true;
}

// Створюємо два дерева вузлів
const root1 = document.createElement('div');
const child1 = document.createElement('p');
child1.textContent = 'Hello';
root1.appendChild(child1);

const root2 = document.createElement('div');
const child2 = document.createElement('p');
child2.textContent = 'Hello';
root2.appendChild(child2);

console.log(areTreesEqual(root1, root2)); // true