JavaScriptDOM i zdarzenia

Element.replaceWith()

Zastępuje element w dokumencie innymi elementami lub tekstem. Stary element zostaje usunięty ze strony.

Zwraca
undefined
Zmienia oryginał
Tak
Na tej stronie

Przykład

#
JavaScript
const buyButton = document.querySelector('#buy')

const badge = document.createElement('span')
badge.className = 'badge'
badge.textContent = 'Kupiono ✓'

buyButton.replaceWith(badge)

console.log(buyButton.isConnected)
console.log(document.querySelector('.card').lastElementChild)
console.log(document.querySelector('#buy'))
Konsola
false
<span class="badge">
null

Definicja i zastosowanie

#

Metoda replaceWith() wstawia podane węzły albo napisy w miejsce elementu, a sam element usuwa z dokumentu. Nowa treść trafia dokładnie tam, gdzie był stary element: ma tego samego rodzica i tych samych sąsiadów.

Przyjmuje dowolną liczbę argumentów, więc jeden element możesz zastąpić kilkoma. Napisy są wstawiane jako zwykły tekst, a nie jako HTML, tak samo jak w append(). Jeśli przekażesz element, który już jest na stronie, zostanie przeniesiony w nowe miejsce.

Zastąpiony element nie znika z pamięci. Dopóki masz do niego odwołanie w zmiennej, możesz go później przywrócić, np. kolejnym wywołaniem replaceWith(). Starszy sposób na to samo to parent.replaceChild(nowy, stary), który wymaga odwołania do rodzica i przyjmuje argumenty w mniej intuicyjnej kolejności.

Składnia

#
Składnia
element.replaceWith(node1, node2, …)
element.replaceWith(text)

Parametry

#
  • node1…nodeN

    elementy lub napisy

    Węzły albo napisy, które zajmą miejsce elementu, w podanej kolejności.

Więcej przykładów

#
Kilka węzłów zamiast jednego
JavaScript
const status = document.querySelector('#status')
const points = document.createElement('strong')
points.textContent = '340 pkt'

status.replaceWith('ukończono 7 lekcji, ', points)

const paragraph = document.querySelector('p')
console.log(paragraph.textContent)
console.log(paragraph.innerHTML)
Konsola
Status: ukończono 7 lekcji, 340 pkt
Status: ukończono 7 lekcji, <strong>340 pkt</strong>
Tryb edycji: tekst zamieniony na pole i z powrotem
JavaScript
const title = document.querySelector('#title')
const input = document.createElement('input')
input.value = title.textContent

title.replaceWith(input)
console.log(document.querySelector('#title'))

input.value = 'Notatka o pętlach'
title.textContent = input.value
input.replaceWith(title)

console.log(document.querySelector('#title').textContent)
Konsola
null
Notatka o pętlach

Nagłówek po zastąpieniu nie jest w dokumencie, ale zmienna title nadal go przechowuje. Dzięki temu po edycji wraca na swoje miejsce z nowym tekstem.

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

#
  • replaceWith() wywołujesz na elemencie, który ma zniknąć. Nie potrzebujesz odwołania do rodzica, jak przy replaceChild().
  • Napisy są wstawiane jako tekst. Jeśli nowa treść ma być kodem HTML, zbuduj elementy przez createElement() albo wstaw kod przez insertAdjacentHTML() i dopiero potem usuń stary element.
  • Zachowaj odwołanie do starego elementu w zmiennej, jeśli będzie trzeba go przywrócić, np. po wyjściu z trybu edycji.

Powiązane hasła

#

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