JS метод Element.insertAdjacentElement()


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

insertAdjacentElement() - це метод об'єкту Element в JavaScript, який дозволяє вставляти вказаний елемент відносно поточного елементу. Цей метод є корисним при динамічній маніпуляції з DOM (Document Object Model) та вставці нових елементів на веб-сторінку. Він надає більший контроль над позицією вставки порівняно з іншими методами, такими як appendChild() або insertBefore().

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

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

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

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

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

const parent = document.getElementById('parent');
const newElement = document.createElement('span');
newElement.textContent = 'Новий елемент';

// Вставляє елемент перед поточним елементом
parent.insertAdjacentElement('beforebegin', newElement);

// Вставляє елемент після поточного елементу
parent.insertAdjacentElement('afterend', newElement.cloneNode(true));

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

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

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

const parent = document.getElementById('parent');
const newElement = document.createElement('div');
newElement.textContent = 'Новий дочірній елемент';

// Вставляє елемент як перший дочірній елемент
parent.insertAdjacentElement('afterbegin', newElement);

// Вставляє елемент як останній дочірній елемент
parent.insertAdjacentElement('beforeend', newElement.cloneNode(true));

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

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

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

автор: Bond

Порада

Якщо потрібно вставити кілька елементів в одну позицію, використовуй цикл або створюй фрагмент документа за допомогою document.createDocumentFragment() для кращої продуктивності.

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

Пам'ятай, що insertAdjacentElement() вставляє елемент як вузол DOM, тому перед використанням потрібно створити екземпляр Element за допомогою document.createElement() або отримати існуючий вузол.

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

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

автор: Bond

Синтаксис

insertAdjacentElement(position, element)

Параметри

position

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

автор: Bond

element

Елемент, який потрібно вставити у дерево.

автор: Bond

Повернення

element

Повертає вставлений елемент або null у разі невдачі вставки.

автор: Bond

Переглядачі

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

Приклади

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

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

HTML

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

JS

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

// Функція для додавання нового товару
function addProduct(position) {
  const newProduct = document.createElement('li');
  newProduct.textContent = productInput.value.trim();

  if (position === 'beforebegin') {
    productList.insertAdjacentElement(position, newProduct);
  } else {
    const targetProduct = productList.querySelector(`li:nth-child(${position})`);
    targetProduct.insertAdjacentElement('beforebegin', newProduct);
  }

  productInput.value = '';
}

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

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

HTML

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

JS

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

// Створюємо новий елемент
const newElement = document.createElement('div');
newElement.textContent = 'Новий елемент';

// Вставляємо новий елемент перед вихідним елементом
targetElement.insertAdjacentElement('beforebegin', newElement);
автор: Bond

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

При натисканні на кнопку "Додати перед першим", новий товар буде вставлений перед першим елементом списку за допомогою insertAdjacentElement('beforebegin', newProduct).

При натисканні на кнопку "Додати після першого", новий товар буде вставлений після першого елемента списку за допомогою insertAdjacentElement('beforebegin', newProduct) для першого елемента списку.

При натисканні на кнопку "Додати після вказаної позиції", користувачеві буде запропоновано ввести номер позиції, після якої буде вставлений новий товар. Ця функціональність реалізована за допомогою методу querySelector для знаходження цільового елемента списку та вставки нового товару перед ним за допомогою insertAdjacentElement('beforebegin', newProduct).

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

автор: 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`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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