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

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

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

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

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

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

JS метод Element.insertAdjacentHTML()

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

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

Метод insertAdjacentHTML() приймає два аргументи: перший - рядок, який визначає позицію вставки відносно поточного елементу, а другий - рядок з HTML-вмістом, який потрібно вставити. Можливі значення для позиції вставки:

  • 'beforebegin' - вставляє HTML-вміст безпосередньо перед поточним елементом.
  • 'afterbegin' - вставляє HTML-вміст як перший дочірній вміст поточного елементу.
  • 'beforeend' - вставляє HTML-вміст як останній дочірній вміст поточного елементу.
  • 'afterend' - вставляє HTML-вміст безпосередньо після поточного елементу.

Наприклад, припустимо, що у нас є такий HTML-код:

<div id="parent">
  <p>Початковий вміст</p>
</div>

Ми можемо використати insertAdjacentHTML() для вставки нового HTML-вмісту відносно елементу <div>:

const parent = document.getElementById('parent');

// Вставляє HTML-вміст перед поточним елементом
parent.insertAdjacentHTML('beforebegin', '<span>Новий елемент</span>');

// Вставляє HTML-вміст після поточного елементу
parent.insertAdjacentHTML('afterend', '<span>Ще один новий елемент</span>');

Після виконання цього коду, HTML-структура буде такою:

<span>Новий елемент</span>
<div id="parent">
  <p>Початковий вміст</p>
</div>
<span>Ще один новий елемент</span>

Метод insertAdjacentHTML() також корисний при вставці HTML-вмісту всередину інших елементів. Наприклад:

const parent = document.getElementById('parent');

// Вставляє HTML-вміст як перший дочірній вміст
parent.insertAdjacentHTML('afterbegin', '<div>Новий дочірній вміст</div>');

// Вставляє HTML-вміст як останній дочірній вміст
parent.insertAdjacentHTML('beforeend', '<div>Ще один новий дочірній вміст</div>');

Після виконання цього коду, HTML-структура буде такою:

<div id="parent">
  <div>Новий дочірній вміст</div>
  <p>Початковий вміст</p>
  <div>Ще один новий дочірній вміст</div>
</div>

Слід бути обережним при використанні insertAdjacentHTML() з даними, введеними користувачем, оскільки вставлений HTML-код буде інтерпретовано браузером. Це може призвести до ризиків безпеки, таких як Cross-Site Scripting (XSS) атаки. Для безпечного введення користувачем рекомендується належним чином обробляти вхідні дані перед вставкою в DOM.

Порада:

Будьте обережні при використанні insertAdjacentHTML() з даними, введеними користувачем, оскільки вставлений HTML-код буде інтерпретовано браузером. Для безпечного введення користувачем рекомендується належним чином обробляти вхідні дані перед вставкою в DOM.

Порада:

Якщо потрібно вставити великий обсяг HTML-вмісту, використовуйте insertAdjacentHTML() замість innerHTML для кращої продуктивності, оскільки при використанні insertAdjacentHTML() браузеру не потрібно повторно розбирати та перебудовувати весь вміст елементу.

Порада:

Для досвідчених розробників: при роботі з великими об'ємами даних або частими оновленнями вмісту, використання insertAdjacentHTML() може призвести до зниження продуктивності. У таких випадках розгляньте можливість використання більш ефективних методів маніпуляції DOM, таких як createElement(), createDocumentFragment() або бібліотек для роботи з DOM, наприклад, React або Vue.js.

Синтаксис

insertAdjacentHTML(position, text)

Параметри

*position

Рядок, що представляє позицію відносно елемента.

*text

Рядок, який буде розібраний як HTML або XML і вставлений у дерево.

Return

none

Повертає значення undefined.

Переглядачі

Переглядач

1

8

4

8

17

Переглядач

37

18

8

4

Переглядач

-

-

Приклади


Цей приклад демонструє використання методу insertAdjacentHTML() для додавання нових елементів у список покупок. Користувач може ввести новий елемент у текстове поле та натиснути кнопку "Додати", щоб додати його до списку. Метод insertAdjacentHTML('beforeend', ...) вставляє новий елемент списку (<li>) у кінець батьківського елемента <ul>.

Також є кнопка "Очистити список", яка викликає функцію clearList(), що встановлює властивість innerHTML батьківського елемента <ul> у порожній рядок, видаляючи всі елементи списку.

Користувач може взаємодіяти з прикладом, додаючи нові елементи до списку покупок та очищаючи список за потреби.

У цьому прикладі ми використовуємо метод insertAdjacentHTML() для вставки HTML-розмітки у відносну позицію до існуючого елемента. Це дозволяє динамічно створювати та додавати нові елементи до DOM-дерева.

// Отримуємо посилання на цільовий елемент
const targetElement = document.getElementById('target');

// Вставляємо HTML-розмітку після цільового елемента
const newHTML = '<div>Новий елемент</div>';
targetElement.insertAdjacentHTML('afterend', newHTML);

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

// Отримуємо посилання на список та поле введення
const itemList = document.getElementById('itemList');
const itemInput = document.getElementById('itemInput');

// Функція для додавання нового елемента
function addItem(position) {
  const newItem = `<li>${itemInput.value.trim()}</li>`;

  if (position === 'beforebegin') {
    itemList.insertAdjacentHTML(position, newItem);
  } else {
    const targetItem = itemList.querySelector(`li:nth-child(${position})`);
    targetItem.insertAdjacentHTML('beforebegin', newItem);
  }

  itemInput.value = '';
}

// Додаємо обробники подій для кнопок
document.getElementById('addBeforeBtn').addEventListener('click', () => addItem('beforebegin'));
document.getElementById('addAfterBtn').addEventListener('click', () => addItem(1));
document.getElementById('addAfterPositionBtn').addEventListener('click', () => {
  const position = parseInt(prompt('Введіть позицію для вставки (1, 2, 3, ...)'), 10);
  addItem(position);
});