JavaScript метод Element.insertAdjacentElement()

Определение и применение

JavaScript метод insertAdjacentElement() объекта Element позволяет вставить указанный узел элемента в заданную позицию относительно элемента, на котором он вызывается.

Схематичное отображение работы метода insertAdjacentElement() отображено на следующем изображении:

Схематичное отображение работы метода insertAdjacentElement() объекта Element

Поддержка браузерами

Спецификация: dom.spec.whatwg

Поддерживается во всех основных браузерах с 2018 года.

Показать браузеры
Совместимостьapi.Element.insertAdjacentElement
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
insertAdjacentElement✓1✓17✓48✓8✓3✓18✓48✓10.1✓1✓1.0✓4.4✓1

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
const insertedElement = targetElement.insertAdjacentElement(position, element);

Спецификация

DOM Standard.

Значения параметров

Параметры Element.insertAdjacentElement()
Параметр Описание
position Строковое значение, представляющее позицию относительно целевого элемента.
Возможные значения:
  • "beforebegin" - Элемент будет вставлен перед целевым элементом.
  • "afterbegin" - Элемент будет вставлен внутри целевого элемента перед его первым дочерним элементом.
  • "beforeend" - Элемент будет вставлен внутри целевого элемента после его последнего дочернего элемента.
  • "afterend" - Элемент будет вставлен после целевого элемента.
Для позиций "beforebegin" и "afterend" нужен родительский узел, но подключение к документу не требуется: родителем может быть DocumentFragment. Является обязательным параметром.
element Элемент, вставляемый в дерево DOM. Обязательный параметр.

Метод возвращает вставленный элемент или null, если вставка не выполнена (например, при позиции "beforebegin" у элемента без родителя).

Исключения

Тип исключения Описание — Element.insertAdjacentElement()
Тип исключения Описание
SyntaxError Возникает в том случае, если указанная позиция не является возможным значением.
TypeError Возникает в том случае, если указанный элемент не является допустимым элементом.

Пример использования

Перемещение одного элемента в начало и конец списка

Нажмите ▶, затем кнопки в результате: элемент My element появляется в начале или в конце списка. Он перемещается, а не копируется, потому что вставляется один и тот же созданный узел.

index.html
HTML
<button data-migration-click-0="">Insert with afterbegin position</button>
<button data-migration-click-2="">Insert with beforeend position</button>
<ul>
  <li>Элемент списка</li>
</ul>
main.js
JavaScript
const ul = document.querySelector('ul')
let li = document.createElement('li')
const textNode = document.createTextNode('My element')
li.appendChild(textNode)

function insertAfterBegin() {
    ul.insertAdjacentElement('afterbegin', li)
}
function insertBeforeEnd() {
    ul.insertAdjacentElement('beforeend', li)
}

// Обработчики кнопок перенесены из HTML для запуска с CSP без inline-скриптов.
document.querySelector('[data-migration-click-0]').addEventListener('click', function () {
    insertAfterBegin()
})
document.querySelector('[data-migration-click-0]').removeAttribute('data-migration-click-0')
document.querySelector('[data-migration-click-2]').addEventListener('click', function () {
    insertBeforeEnd()
})
document.querySelector('[data-migration-click-2]').removeAttribute('data-migration-click-2')

В этом примере с использованием метода addEventListener() при нажатии на определенную кнопку (HTML элемент <button>) мы вызываем функцию, которая с помощью метода insertAdjacentElement() вставляет элемент <li> внутри элемента <ul> перед его первым дочерним элементом, или после его последнего дочернего элемента.

Обратите внимание, что мы предварительно с использованием метода querySelector() выбираем первый элемент <ul> в документе и инициализируем этим значением переменную. После этого с использованием метода createElement() создаем новый элемент (пустой узел Element) с указанным именем тега <li>, с использованием метода createTextNode() создаем текстовый узел с указанным текстом и с использованием метода appendChild() помещаем его в этот элемент.