JavaScriptDOM i zdarzenia

Element.insertAdjacentHTML()

Parsuje napis jako HTML i wstawia powstałe elementy w wybranym miejscu względem elementu.

Zwraca
undefined
Zmienia oryginał
Tak
Na tej stronie

Przykład

#
JavaScript
const chat = document.querySelector('#chat')

chat.insertAdjacentHTML('beforeend', '<li>Kuba: Hej, jak idzie kurs?</li>')
chat.insertAdjacentHTML('afterbegin', '<li class="system">Czat otwarty</li>')

console.log(Array.from(chat.children, (li) => li.textContent))
Konsola
['Czat otwarty', 'Ania: Cześć!', 'Kuba: Hej, jak idzie kurs?']

Definicja i zastosowanie

#

Metoda insertAdjacentHTML(pozycja, html) zamienia napis na elementy HTML i wstawia je obok elementu albo do jego wnętrza. W przeciwieństwie do przypisania innerHTML nie usuwa istniejącej zawartości, więc stare elementy, ich obsługa zdarzeń i stan zostają nienaruszone.

Pierwszy argument określa miejsce: "beforebegin" przed elementem, "afterbegin" na początku jego wnętrza, "beforeend" na końcu wnętrza i "afterend" za elementem. Pozycje "beforebegin" i "afterend" wymagają, żeby element miał rodzica.

Tak jak przy innerHTML, wstawiany tekst jest interpretowany jako kod. Nie przekazuj do tej metody danych od użytkownika bez oczyszczenia. Do bezpiecznego wstawiania tekstu służy insertAdjacentText(), a gotowych elementów insertAdjacentElement().

Składnia

#
Składnia
element.insertAdjacentHTML(position, html)

Parametry

#
  • position

    napis

    Miejsce wstawienia: "beforebegin", "afterbegin", "beforeend" albo "afterend".
  • html

    napis

    Kod HTML do sparsowania i wstawienia.

Więcej przykładów

#
Wszystkie cztery pozycje
JavaScript
const target = document.querySelector('#target')

target.insertAdjacentHTML('beforebegin', '<p>1. beforebegin</p>')
target.insertAdjacentHTML('afterbegin', '<b>2. afterbegin </b>')
target.insertAdjacentHTML('beforeend', '<b> 3. beforeend</b>')
target.insertAdjacentHTML('afterend', '<p>4. afterend</p>')

console.log(target.previousElementSibling.textContent)
console.log(target.textContent)
console.log(target.nextElementSibling.textContent)
Konsola
1. beforebegin
2. afterbegin cel 3. beforeend
4. afterend
Istniejące elementy zostają nietknięte
JavaScript
const feed = document.querySelector('#feed')
const button = document.querySelector('#load')

button.addEventListener('click', () => {
  button.insertAdjacentHTML('beforebegin', '<p>Nowy wpis w aktualnościach</p>')
  console.log('Wpisów:', feed.querySelectorAll('p').length)
})

button.click()
button.click()
console.log(button.isConnected)
Konsola
Wpisów: 1
Wpisów: 2
true

Przycisk i jego obsługa kliknięć działają dalej, bo nowe wpisy są dokładane obok, a nie przez przebudowę całej zawartości jak przy innerHTML +=.

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Do dopisywania elementów do listy wybieraj insertAdjacentHTML("beforeend", html) zamiast innerHTML +=. Istniejące elementy i ich zdarzenia zostają nietknięte.
  • Dane od użytkownika wstawiaj przez insertAdjacentText() albo textContent, nigdy jako HTML.
  • Nazwy pozycji łatwo zapamiętać: „begin” i „end” to otwierający i zamykający znacznik elementu, a „before” i „after” mówią, po której stronie znacznika trafi nowy kod.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.