DOM i jego znaczenie
This content is not available in your language yet.
Wprowadzenie
Dział zatytułowany „Wprowadzenie”DOM (Document Object Model) to interfejs programistyczny reprezentujacy strukture dokumentu HTML jako drzewo obiektow. Dzieki DOM, JavaScript może dynamicznie modyfikować zawartosc, strukture i style strony internetowej.
Każdy element HTML staje się obiektem (węzłem), który można odczytywać, modyfikować lub usuwać za pomoca JavaScript. DOM stanowi most miedzy statycznym kodem HTML a dynamicznymi interakcjami na stronie.
Kluczowe pojecia
Dział zatytułowany „Kluczowe pojecia”Czym jest DOM?
Dział zatytułowany „Czym jest DOM?”- Nie jest czescia JavaScript - to API przegladarki
- Nie jest tym samym co HTML - HTML to tekst, DOM to obiektowa reprezentacja
- Jest dynamiczny - zmiany w DOM natychmiast widac na stronie
Typy węzłów (Node Types)
Dział zatytułowany „Typy węzłów (Node Types)”- Element - tag HTML (div, p, span)
- Text - tekst wewnatrz elementu
- Attribute - atrybut elementu (class, id)
- Document - korzen drzewa DOM
- Comment - komentarz HTML
Struktura drzewa DOM
Dział zatytułowany „Struktura drzewa DOM” document │ <html> / \ <head> <body> │ / \ <title> <div> <footer> │ <p> / \ "Tekst" <span>Przykładowy HTML:
<!DOCTYPE html><html> <head> <title>Strona</title> </head> <body> <div id="container"> <p class="text">Tekst <span>ważny</span></p> </div> <footer>Stopka</footer> </body></html>Metody selekcji elementow
Dział zatytułowany „Metody selekcji elementow”Selekcja pojedynczego elementu
Dział zatytułowany „Selekcja pojedynczego elementu”// Po ID - zwraca jeden element lub nullconst container = document.getElementById('container');
// Po selektorze CSS - zwraca pierwszy pasujacyconst paragraph = document.querySelector('.text');const header = document.querySelector('h1');Selekcja wielu elementow
Dział zatytułowany „Selekcja wielu elementow”// Wszystkie elementy z klasa - zwraca HTMLCollection (live)const items = document.getElementsByClassName('item');
// Wszystkie elementy po tagu - zwraca HTMLCollectionconst divs = document.getElementsByTagName('div');
// Po selektorze CSS - zwraca NodeList (static)const buttons = document.querySelectorAll('button.primary');Manipulacja trescia
Dział zatytułowany „Manipulacja trescia”Odczyt i zmiana tekstu
Dział zatytułowany „Odczyt i zmiana tekstu”const element = document.querySelector('#info');
// Pobierz tekst (bez tagow HTML)console.log(element.textContent);
// Zmien tekstelement.textContent = 'Nowy tekst';
// innerHTML - interpretuje tagi HTML (uwaga na XSS!)element.innerHTML = '<strong>Pogrubiony</strong> tekst';Atrybuty elementow
Dział zatytułowany „Atrybuty elementow”const link = document.querySelector('a');
// Odczyt atrybutuconsole.log(link.getAttribute('href'));console.log(link.href); // bezposredni dostep
// Ustawienie atrybutulink.setAttribute('target', '_blank');link.href = 'https://example.com';
// Usuniecie atrybutulink.removeAttribute('target');
// Sprawdzenie istnieniaif (link.hasAttribute('disabled')) { console.log('Link wyłączony');}Klasy CSS
Dział zatytułowany „Klasy CSS”const box = document.querySelector('.box');
// Dodaj klasebox.classList.add('active');
// Usun klasebox.classList.remove('hidden');
// Przełącz (toggle) - dodaj jeśli nie ma, usun jeśli jestbox.classList.toggle('selected');
// Sprawdz czy zawieraif (box.classList.contains('active')) { console.log('Box jest aktywny');}Tworzenie i usuwanie elementow
Dział zatytułowany „Tworzenie i usuwanie elementow”Tworzenie nowych elementow
Dział zatytułowany „Tworzenie nowych elementow”// Utworz nowy elementconst newDiv = document.createElement('div');newDiv.textContent = 'Nowy element';newDiv.classList.add('card');
// Dodaj do dokumentudocument.body.appendChild(newDiv);
// Wstaw przed innym elementemconst container = document.querySelector('#container');const reference = document.querySelector('#reference');container.insertBefore(newDiv, reference);Usuwanie elementow
Dział zatytułowany „Usuwanie elementow”const element = document.querySelector('.to-remove');
// Nowoczesna metodaelement.remove();
// Starsza metoda (przez rodzica)element.parentNode.removeChild(element);Obsługa zdarzen (Events)
Dział zatytułowany „Obsługa zdarzen (Events)”Dodawanie listenera
Dział zatytułowany „Dodawanie listenera”const button = document.querySelector('button');
button.addEventListener('click', function(event) { console.log('Kliknieto przycisk!'); console.log('Target:', event.target);});
// Funkcja strzałkowabutton.addEventListener('click', (e) => { e.preventDefault(); // Zapobiegaj domyslnej akcji});Popularne zdarzenia
Dział zatytułowany „Popularne zdarzenia”| Zdarzenie | Kiedy wystepuje |
|---|---|
| click | Klikniecie elementu |
| submit | Wysłanie formularza |
| input | Zmiana wartości input |
| keydown | Nacisniecie klawisza |
| mouseover | Najechanie myszka |
| load | Załadowanie strony |
Event Delegation (delegacja zdarzen)
Dział zatytułowany „Event Delegation (delegacja zdarzen)”// Zamiast dodawać listener do każdego buttona// Dodajemy jeden do rodzica
document.querySelector('#lista').addEventListener('click', (e) => { if (e.target.matches('button.delete')) { e.target.closest('li').remove(); }});Reflow i Repaint
Dział zatytułowany „Reflow i Repaint”Definicje
Dział zatytułowany „Definicje”- Reflow - ponowne obliczenie layoutu (pozycje, rozmiary)
- Repaint - ponowne rysowanie elementow (kolory, cienie)
Optymalizacja
Dział zatytułowany „Optymalizacja”// Źle - wiele reflowfor (let i = 0; i < 100; i++) { document.body.innerHTML += '<div>Item</div>';}
// Dobrze - jeden reflowconst fragment = document.createDocumentFragment();for (let i = 0; i < 100; i++) { const div = document.createElement('div'); div.textContent = 'Item'; fragment.appendChild(div);}document.body.appendChild(fragment);Najczestsze błędy
Dział zatytułowany „Najczestsze błędy”// Zawsze sprawdzaj czy element istniejeconst element = document.getElementById('może-nie-istniec');if (element) { element.textContent = 'OK';}Podsumowanie
Dział zatytułowany „Podsumowanie”- DOM to obiektowa reprezentacja dokumentu HTML
- Przegladarka tworzy DOM z kodu HTML
- JavaScript manipuluje DOM przez API przegladarki
- Selekcja elementow: getElementById, querySelector, querySelectorAll
- Manipulacja: textContent, innerHTML, classList, setAttribute
- Zdarzenia obsługujemy przez addEventListener
- Optymalizuj operacje DOM aby unikac wielu reflow
MDN: DOM Dokumentacja DOM API
JavaScript.info: DOM Interaktywny kurs DOM
DOM Enlightenment Książka o DOM (darmowa online)