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.

автор: Bond

Порада

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

автор: Bond
Порада

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

автор: Bond
Порада

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

автор: Bond

Синтаксис

insertAdjacentHTML(position, text)

Параметри

position

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

автор: Bond

text

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

автор: Bond

Повернення

none

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

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 8 4 8 17 4*
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 8 4

Приклади

+ запропонувати свій приклад у пісочниці

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

HTML

<div id="target">Демонстраційний елемент</div>

JS

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

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

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

HTML

<ul id="itemList">
    <li>перший пункт</li>
    <li>другий пункт</li>
</ul>
<input type="text" id="itemInput" value="текст для прикладу" placeholder="Введи щось">
<button id="addBeforeBtn">Додати</button>
<button id="addAfterBtn">Додати</button>
<button id="addAfterPositionBtn">Додати</button>

JS

// Отримуємо посилання на список та поле введення
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);
});
автор: Bond

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

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

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

автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід