Co to jest `innerHTML` w HTML?

innerHTML to właściwość (property) w języku JavaScript, która pozwala pobierać oraz zmieniać zawartość HTML danego elementu na stronie internetowej. Umożliwia zarówno odczyt, jak i dynamiczną zmianę kodu HTML znajdującego się wewnątrz wybranego elementu, włącznie z obsługą zagnieżdżonych tagów HTML, stylów czy nawet skryptów.

Jak działa innerHTML?

innerHTML jest częścią DOM (Document Object Model) – specjalnego interfejsu, dzięki któremu JavaScript może manipulować strukturą strony. Domyślnie każda struktura HTML po załadowaniu do przeglądarki zamieniana jest na odpowiedni schemat obiektów, które można edytować za pomocą skryptów.

  • Odczyt – po odwołaniu się do właściwości innerHTML otrzymasz ciąg znaków (string), będący zawartością HTML z wnętrza elementu;
  • Zmiana – przypisanie nowej wartości do innerHTML zamienia aktualną zawartość danego elementu na wartość podaną przez programistę – tutaj możesz używać zwykłego tekstu lub tagów HTML.

Przykład użycia – odczyt innerHTML

<p id="example">To jest <strong>ważny</strong> tekst.</p> 
<script> 
var zawartosc = document.getElementById("example").innerHTML; 
// zawartosc = "To jest <strong>ważny</strong> tekst." 
</script> 

W tym przykładzie zmienna zawartosc będzie zawierała tekst razem z tagiem <strong>.

Przykład użycia – zmiana innerHTML

<p id="result">Początkowa treść paragrafu.</p> 
<button onclick="zmienTresc()">Zmień treść</button> 
<script> 
function zmienTresc() { 
  document.getElementById("result").innerHTML = 'Nowa <span style="color:red">czerwona</span> treść!'; 
} 
</script> 

Po kliknięciu przycisku tekst wewnątrz paragrafu zostanie zastąpiony nową zawartością i pojawi się w nim dodatkowo kolorowany fragment.

Przykład kopiowania kodu HTML pomiędzy elementami

<div id="div1"><b>Ważna</b> treść A</div> 
<div id="div2">Treść B z <em>kursywą</em></div> 
<button onclick="kopiuj()">Kopiuj zawartość</button> 
<script> 
function kopiuj() { 
  document.getElementById("div1").innerHTML = document.getElementById("div2").innerHTML; 
} 
</script> 

Tutaj po kliknięciu przycisku zawartość div2 zostanie skopiowana do div1 – razem z całym kodem HTML.

Różnice – innerHTML, innerText, textContent

Właściwość Co zwraca / zmienia
innerHTML Całą zawartość HTML elementu, wraz z tagami HTML.
innerText Tylko widoczny tekst, bez tagów, z uwzględnieniem stylów CSS.
textContent Cały tekst, bez tagów, bez stylów CSS.

Zastosowania innerHTML

  • Tworzenie dynamicznych elementów – dodawanie nowych przycisków, formularzy czy akapitów bez przeładowania strony;
  • Aktualizacja zawartości na żądanie – wyświetlanie wyników wyszukiwania, dodawanie produktów do koszyka, aktualizacja liczników;
  • Kopiowanie i przenoszenie struktury HTML między elementami.
  • Wykonywanie prostych efektów i mechanizmów interakcji z użytkownikiem.

Bezpieczeństwo – na co uważać?

Użycie innerHTML wiąże się z potencjalnym ryzykiem ataków XSS (Cross-site Scripting), jeśli do wnętrza elementu wstawiamy niezaufane dane, np. pochodzące od użytkowników lub z zewnątrz. Zawsze należy filtrować i odpowiednio zabezpieczać dane podawane do innerHTML, by nie dopuścić do wstrzyknięcia złośliwego kodu.

Podsumowanie

innerHTML to jedno z podstawowych narzędzi JavaScript do dynamicznej manipulacji treścią HTML. Dzięki niej twórcy stron mogą tworzyć interaktywne aplikacje bez konieczności przeładowywania całej strony. Jej poprawne i bezpieczne stosowanie pozwala elastycznie i wygodnie sterować wyświetlaną zawartością.

Programista i twórca serwisu Creative Coding, absolwent Politechniki Warszawskiej (WEiTI). Od 10+ lat łączy front‑end, grafikę generatywną i narzędzia dla twórców; opublikował 120+ projektów i artykułów, prowadził warsztaty dla 2 000+ uczestników. Pracuje z JavaScriptem, Three.js, P5.js i GLSL, bada wydajność i dokumentuje procesy, tworząc praktyczne przewodniki dla osób łączących kod z obrazem, dźwiękiem i interakcją.
Zostaw komentarz

Komentarze

Brak komentarzy. Dlaczego nie rozpoczniesz dyskusji?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *