{"id":1234,"date":"2025-04-09T19:51:43","date_gmt":"2025-04-09T17:51:43","guid":{"rendered":"https:\/\/piotrgabriel.pl\/wiki\/?p=1234"},"modified":"2025-09-07T19:53:26","modified_gmt":"2025-09-07T17:53:26","slug":"javascript-cz-7-podstawy-pracy-z-dom-w-javascript","status":"publish","type":"post","link":"https:\/\/piotrgabriel.pl\/wiki\/javascript-cz-7-podstawy-pracy-z-dom-w-javascript\/","title":{"rendered":"Javascript cz.7 &#8211; Podstawy pracy z DOM w JavaScript"},"content":{"rendered":"<p data-start=\"264\" data-end=\"461\">Model DOM (Document Object Model) to spos\u00f3b, w jaki JavaScript \u201ewidzi\u201d stron\u0119 internetow\u0105. Dzi\u0119ki niemu mo\u017cemy wyszukiwa\u0107 elementy, zmienia\u0107 ich zawarto\u015b\u0107, a tak\u017ce dodawa\u0107 i usuwa\u0107 nowe elementy.<\/p>\n<p data-start=\"463\" data-end=\"556\">Zobaczmy najwa\u017cniejsze metody i operacje, kt\u00f3re powinien zna\u0107 ka\u017cdy pocz\u0105tkuj\u0105cy programista.<!--more--><\/p>\n<h2 data-start=\"563\" data-end=\"591\">1. Wyszukiwanie element\u00f3w<\/h2>\n<p data-start=\"593\" data-end=\"650\">Aby co\u015b zmieni\u0107 na stronie, najpierw musimy to znale\u017a\u0107.<\/p>\n<p data-start=\"593\" data-end=\"650\"><code>&lt;p id=\"tekst\"&gt;To jest przyk\u0142adowy tekst&lt;\/p&gt;<\/code><\/p>\n<p data-start=\"593\" data-end=\"650\">Wyszukiwanie po <code data-start=\"729\" data-end=\"733\">id<\/code><\/p>\n<p data-start=\"593\" data-end=\"650\"><code>let element = document.getElementById(\"tekst\");<br \/>\nconsole.log(element.innerHTML); \/\/ wy\u015bwietli: To jest przyk\u0142adowy tekst<\/code><\/p>\n<p data-start=\"593\" data-end=\"650\">Wyszukiwanie po nazwie taga<\/p>\n<p data-start=\"593\" data-end=\"650\"><code>let paragrafy = document.getElementsByTagName(\"p\");<\/code><br \/>\n<code>console.log(paragrafy[0].innerHTML); \/\/ pierwszy &lt;p&gt; na stronie<\/code><\/p>\n<p data-start=\"593\" data-end=\"650\">Wyszukiwanie po klasie<\/p>\n<p data-start=\"593\" data-end=\"650\"><code>&lt;p class=\"opis\"&gt;Pierwszy opis&lt;\/p&gt;<\/code><br \/>\n<code>&lt;p class=\"opis\"&gt;Drugi opis&lt;\/p&gt;<\/code><\/p>\n<p data-start=\"593\" data-end=\"650\">i kod JavaScript<\/p>\n<p data-start=\"593\" data-end=\"650\"><code>let opisy = document.getElementsByClassName(\"opis\");<\/code><br \/>\n<code>console.log(opisy[1].innerHTML); \/\/ wy\u015bwietli: Drugi opis<\/code><\/p>\n<p data-start=\"593\" data-end=\"650\">Wyja\u015bnijmy tutaj jeszcze, dlaczego console.log dla opisy[1] wy\u015bwietli 2 element. Ot\u00f3\u017c wszystkie klasy &#8222;opis&#8221; w zapisie tablocowym [nawias kwadratowy] w kt\u00f3rym umieszczony jest indeks jeden, to tak na prawd\u0119 element nr 2, gdy\u017c w tablicach, indeksy liczymy od ZERA.<\/p>\n<h2 data-start=\"132\" data-end=\"160\">2. Zmiana element\u00f3w w DOM<\/h2>\n<p data-start=\"162\" data-end=\"373\">Kiedy znajdziemy element na stronie (np. akapit, link, obrazek), mo\u017cemy go <strong data-start=\"237\" data-end=\"253\">zmodyfikowa\u0107<\/strong> &#8211; czyli zmieni\u0107 jego <strong data-start=\"275\" data-end=\"284\">tre\u015b\u0107<\/strong>, <strong data-start=\"286\" data-end=\"298\">atrybuty<\/strong> (np. link, \u017ar\u00f3d\u0142o obrazka), albo <strong data-start=\"332\" data-end=\"340\">styl<\/strong> (np. kolor, rozmiar czcionki).<\/p>\n<p data-start=\"162\" data-end=\"373\">Pomy\u015bl o tym tak:<br data-start=\"392\" data-end=\"395\" \/><strong data-start=\"398\" data-end=\"415\">&#8211; DOM to drzewo<\/strong>.<br data-start=\"416\" data-end=\"419\" \/>&#8211; Ka\u017cdy element HTML (np. <code data-start=\"446\" data-end=\"451\">&lt;p&gt;<\/code>, <code data-start=\"453\" data-end=\"458\">&lt;a&gt;<\/code>, <code data-start=\"460\" data-end=\"467\">&lt;img&gt;<\/code>) to <strong data-start=\"472\" data-end=\"493\">ga\u0142\u0105\u017a tego drzewa<\/strong>.<br data-start=\"494\" data-end=\"497\" \/>&#8211; JavaScript pozwala nam \u201epodmieni\u0107 li\u015bcie\u201d \u2013 czyli zawarto\u015b\u0107, wygl\u0105d i ustawienia tych element\u00f3w.<\/p>\n<h3 data-start=\"600\" data-end=\"644\">2.1 Zmiana tre\u015bci elementu (<code data-start=\"632\" data-end=\"643\">innerHTML<\/code>)<\/h3>\n<p data-start=\"645\" data-end=\"716\"><code data-start=\"645\" data-end=\"656\">innerHTML<\/code> to wszystko, co znajduje si\u0119 <strong data-start=\"686\" data-end=\"713\">wewn\u0105trz znacznika HTML<\/strong>.<\/p>\n<p><code>&lt;p id=\"tekst\"&gt;To jest stara tre\u015b\u0107&lt;\/p&gt;<\/code><\/p>\n<p>oraz kod JavaScript, podmieniaj\u0105cy t\u0119 tre\u015b\u0107<\/p>\n<p><code>let element = document.getElementById(\"tekst\");<\/code><br \/>\n<code>element.innerHTML = \"To jest nowa tre\u015b\u0107!\";<\/code><\/p>\n<h3 data-start=\"982\" data-end=\"1058\">2.2 Zmiana atrybut\u00f3w elementu (<code data-start=\"1017\" data-end=\"1031\">setAttribute<\/code> i <code data-start=\"1034\" data-end=\"1057\">attribute = \"warto\u015b\u0107\"<\/code>)<\/h3>\n<p data-start=\"1059\" data-end=\"1096\">Elementy HTML maj\u0105 <strong data-start=\"1078\" data-end=\"1090\">atrybuty<\/strong>, np.:<\/p>\n<p data-start=\"1099\" data-end=\"1147\"><code data-start=\"1099\" data-end=\"1115\">&lt;a href=\"...\"&gt;<\/code> \u2013 link prowadzi gdzie\u015b indziej,<\/p>\n<p data-start=\"1150\" data-end=\"1195\"><code data-start=\"1150\" data-end=\"1167\">&lt;img src=\"...\"&gt;<\/code> \u2013 obrazek ma podane \u017ar\u00f3d\u0142o,<\/p>\n<p data-start=\"1198\" data-end=\"1253\"><code data-start=\"1198\" data-end=\"1219\">&lt;input type=\"text\"&gt;<\/code> \u2013 pole formularza ma typ \u201etekst\u201d.<\/p>\n<p data-start=\"1255\" data-end=\"1289\">Mo\u017cemy je zmienia\u0107 w JavaScripcie.<\/p>\n<h4 data-start=\"1291\" data-end=\"1313\">Przyk\u0142ad 1 &#8211; link<\/h4>\n<p><code>&lt;a id=\"link\" href=\"https:\/\/google.com\"&gt;Kliknij mnie&lt;\/a&gt;<\/code><\/p>\n<p>i kod JavaScript, kt\u00f3ry podmieni link<\/p>\n<p data-start=\"593\" data-end=\"650\"><code>let link = document.getElementById(\"link\");<\/code><br \/>\n<code>link.setAttribute(\"href\", \"https:\/\/piotrgabriel.pl\/wiki\");<\/code><\/p>\n<p data-start=\"593\" data-end=\"650\">Teraz klikni\u0119cie linku przeniesie nie na Google, ale na ten blog.<\/p>\n<h4 data-start=\"1291\" data-end=\"1313\">Przyk\u0142ad 2 &#8211; obrazek<\/h4>\n<p data-start=\"593\" data-end=\"650\"><code>&lt;img id=\"obrazek\" src=\"kot.jpg\" alt=\"Kot\"&gt;<\/code><\/p>\n<p data-start=\"593\" data-end=\"650\">oraz kod JS<\/p>\n<p data-start=\"593\" data-end=\"650\"><code>let img = document.getElementById(\"obrazek\");<\/code><br \/>\n<code>img.setAttribute(\"src\", \"pies.jpg\");<\/code><\/p>\n<p data-start=\"593\" data-end=\"650\">Zamiast kota wy\u015bwietli si\u0119 pies.<\/p>\n<h3 data-start=\"1808\" data-end=\"1852\">2.3 Zmiana styl\u00f3w CSS (<code data-start=\"1835\" data-end=\"1851\">style.property<\/code>)<\/h3>\n<p data-start=\"1853\" data-end=\"1939\">Mo\u017cemy te\u017c zmienia\u0107 wygl\u0105d element\u00f3w &#8211; tak, jakby\u015bmy edytowali CSS, tylko dynamicznie.<\/p>\n<p data-start=\"1853\" data-end=\"1939\"><code>&lt;p id=\"tekst\"&gt;Zmieniam kolor!&lt;\/p&gt;<\/code><\/p>\n<p data-start=\"1853\" data-end=\"1939\">no i JS<\/p>\n<p data-start=\"1853\" data-end=\"1939\"><code>let element = document.getElementById(\"tekst\");<\/code><br \/>\n<code>element.style.color = \"red\"; \/\/ zmiana koloru<\/code><br \/>\n<code>element.style.fontSize = \"24px\"; \/\/ zmiana rozmiaru czcionki<\/code><br \/>\n<code>element.style.fontWeight = \"bold\"; \/\/ pogrubienie<\/code><\/p>\n<p data-start=\"1853\" data-end=\"1939\">Efekt: tekst stanie si\u0119 <strong data-start=\"2247\" data-end=\"2278\">du\u017cy, czerwony i pogrubiony<\/strong>.<\/p>\n<h3 data-start=\"2288\" data-end=\"2314\">2.4 Podsumowanie zmian<\/h3>\n<p data-start=\"2315\" data-end=\"2325\">W skr\u00f3cie:<\/p>\n<ul>\n<li data-start=\"2328\" data-end=\"2391\"><code data-start=\"2328\" data-end=\"2339\">innerHTML<\/code> \u2013 zmienia zawarto\u015b\u0107 elementu (tekst\/HTML w \u015brodku).<\/li>\n<li data-start=\"2392\" data-end=\"2492\">\n<p data-start=\"2394\" data-end=\"2492\"><code data-start=\"2394\" data-end=\"2408\">setAttribute<\/code> albo <code data-start=\"2414\" data-end=\"2437\">element.atrybut = ...<\/code> \u2013 zmienia ustawienia elementu (np. link, src obrazka).<\/p>\n<\/li>\n<li data-start=\"2493\" data-end=\"2572\">\n<p data-start=\"2495\" data-end=\"2572\"><code data-start=\"2495\" data-end=\"2511\">style.property<\/code> \u2013 zmienia wygl\u0105d elementu (kolor, wielko\u015b\u0107, marginesy itd.).<\/p>\n<\/li>\n<\/ul>\n<h3>2.5 Dodatkowe elementy<\/h3>\n<h3><strong><code>document.getElementById(\"lista\")<\/code><\/strong><\/h3>\n<p><strong data-start=\"237\" data-end=\"249\">Co robi:<\/strong> Zwraca <strong data-start=\"257\" data-end=\"266\">jeden<\/strong> element o podanym <code data-start=\"285\" data-end=\"289\">id<\/code> (albo <code data-start=\"296\" data-end=\"302\">null<\/code>, je\u015bli nie istnieje).<br data-start=\"324\" data-end=\"327\" \/><strong data-start=\"327\" data-end=\"338\">Zwraca:<\/strong> Referencj\u0119 do elementu (np. <code data-start=\"367\" data-end=\"385\">HTMLUListElement<\/code>) lub <code data-start=\"391\" data-end=\"397\">null<\/code>.<\/p>\n<p><code>const lista = document.getElementById(\"lista\");<\/code><br \/>\n<code>if (lista) {<\/code><br \/>\n<code>\/\/ mo\u017cemy na niej dzia\u0142a\u0107<\/code><br \/>\n<code>}<\/code><\/p>\n<p><strong data-start=\"502\" data-end=\"514\">Pu\u0142apka:<\/strong> <code data-start=\"515\" data-end=\"519\">id<\/code> musi by\u0107 <strong data-start=\"529\" data-end=\"541\">unikalne<\/strong> na stronie. Gdy element nie istnieje, dostaniesz <code data-start=\"591\" data-end=\"597\">null<\/code> \u2014 sprawdzaj to przed u\u017cyciem.<\/p>\n<h3><strong><code>document.createElement(\"li\")<\/code><\/strong><\/h3>\n<p><strong data-start=\"668\" data-end=\"680\">Co robi:<\/strong> Tworzy <strong data-start=\"688\" data-end=\"704\">nowy element<\/strong> w pami\u0119ci (jeszcze nie na stronie).<br data-start=\"740\" data-end=\"743\" \/><strong data-start=\"743\" data-end=\"754\">Zwraca:<\/strong> Pusty element, kt\u00f3ry dopiero dodasz do DOM.<\/p>\n<p><code>const li = document.createElement(\"li\");<\/code><br \/>\n<code>li.textContent = \"Mleko\"; \/\/ uzupe\u0142nij tre\u015b\u0107<\/code><br \/>\n<code>\/\/ na razie nie wida\u0107 na stronie, dop\u00f3ki nie wstawisz do DOM<\/code><\/p>\n<p><strong data-start=\"958\" data-end=\"970\">Pu\u0142apka:<\/strong> Samo <code data-start=\"976\" data-end=\"991\">createElement<\/code> niczego nie poka\u017ce &#8211; musisz jeszcze u\u017cy\u0107 np. <code data-start=\"1037\" data-end=\"1050\">appendChild<\/code>.<\/p>\n<h3><strong><code>parent.appendChild(node)<\/code><\/strong><\/h3>\n<p><strong data-start=\"1088\" data-end=\"1100\">Co robi:<\/strong> Wstawia <code data-start=\"1109\" data-end=\"1115\">node<\/code> jako <strong data-start=\"1121\" data-end=\"1141\">ostatnie dziecko<\/strong> elementu-rodzica.<br data-start=\"1159\" data-end=\"1162\" \/><strong data-start=\"1162\" data-end=\"1176\">Dodatkowo:<\/strong> Je\u015bli <code data-start=\"1183\" data-end=\"1189\">node<\/code> ju\u017c gdzie\u015b jest w DOM &#8211; <strong data-start=\"1214\" data-end=\"1239\">zostanie przeniesiony<\/strong>, nie skopiowany.<\/p>\n<p><code>const lista = document.getElementById(\"lista\");<\/code><br \/>\n<code>const li = document.createElement(\"li\");<\/code><br \/>\n<code>li.textContent = \"Chleb\";<\/code><br \/>\n<code>lista.appendChild(li); \/\/ teraz element jest widoczny na stronie<\/code><\/p>\n<p data-start=\"1449\" data-end=\"1461\"><strong data-start=\"1449\" data-end=\"1461\">Pu\u0142apki:<\/strong><\/p>\n<ul>\n<li data-start=\"1464\" data-end=\"1542\">Jeden w\u0119ze\u0142 mo\u017ce mie\u0107 tylko <strong data-start=\"1492\" data-end=\"1511\">jednego rodzica<\/strong> \u2014 <code data-start=\"1514\" data-end=\"1527\">appendChild<\/code> go przenosi.<\/li>\n<li data-start=\"1464\" data-end=\"1542\">Chcesz kopi\u0119? U\u017cyj <code data-start=\"1564\" data-end=\"1586\">node.cloneNode(true)<\/code> i dopiero potem <code data-start=\"1603\" data-end=\"1616\">appendChild<\/code>.<\/li>\n<\/ul>\n<h3><code><strong>parent.removeChild(node)<\/strong><\/code><\/h3>\n<p><strong data-start=\"1654\" data-end=\"1666\">Co robi:<\/strong> Usuwa <strong data-start=\"1673\" data-end=\"1694\">konkretne dziecko<\/strong> z rodzica.<br data-start=\"1705\" data-end=\"1708\" \/><strong data-start=\"1708\" data-end=\"1719\">Zwraca:<\/strong> Usuni\u0119ty w\u0119ze\u0142 (gdyby\u015b chcia\u0142 go np. wstawi\u0107 gdzie indziej).<\/p>\n<p><code>const lista = document.getElementById(\"lista\");<\/code><br \/>\n<code>const ostatni = lista?.lastElementChild; \/\/ lepiej ni\u017c lastChild (patrz ni\u017cej)<\/code><br \/>\n<code>if (ostatni) lista.removeChild(ostatni);<\/code><\/p>\n<p data-start=\"1961\" data-end=\"1973\"><strong data-start=\"1961\" data-end=\"1973\">Pu\u0142apki:<\/strong><\/p>\n<ul>\n<li data-start=\"1976\" data-end=\"2025\"><code data-start=\"1976\" data-end=\"1989\">removeChild<\/code> wymaga <strong data-start=\"1997\" data-end=\"2022\">referencji do dziecka<\/strong>.<\/li>\n<li data-start=\"1976\" data-end=\"2025\">U\u017cywaj <code data-start=\"2035\" data-end=\"2053\">lastElementChild<\/code> zamiast <code data-start=\"2062\" data-end=\"2073\">lastChild<\/code>, bo <code data-start=\"2078\" data-end=\"2089\">lastChild<\/code> mo\u017ce by\u0107 <strong data-start=\"2099\" data-end=\"2119\">w\u0119z\u0142em tekstowym<\/strong> (np. spacja\/enter).<\/li>\n<li data-start=\"1976\" data-end=\"2025\">Alternatywa (kr\u00f3cej): <code data-start=\"2166\" data-end=\"2184\">ostatni.remove()<\/code> \u2014 usuwa si\u0119 sam bez odwo\u0142ania do rodzica.<\/li>\n<\/ul>\n<h3><code>parent.getElementsByTagName(\"li\")<\/code><\/h3>\n<p><strong data-start=\"2272\" data-end=\"2284\">Co robi:<\/strong> Zwraca <strong data-start=\"2292\" data-end=\"2311\">\u201e\u017cyw\u0105\u201d kolekcj\u0119<\/strong> (<code data-start=\"2313\" data-end=\"2329\">HTMLCollection<\/code>) wszystkich element\u00f3w o danym tagu <strong data-start=\"2365\" data-end=\"2377\">wewn\u0105trz<\/strong> <code data-start=\"2378\" data-end=\"2386\">parent<\/code>.<br data-start=\"2387\" data-end=\"2390\" \/><strong data-start=\"2390\" data-end=\"2400\">\u201e\u017bywa\u201d<\/strong> = automatycznie si\u0119 aktualizuje, gdy dodajesz\/usuwasz elementy.<\/p>\n<p><code>const lista = document.getElementById(\"lista\");<\/code><br \/>\n<code>const items = lista.getElementsByTagName(\"li\"); \/\/ HTMLCollection (live)<\/code><\/p>\n<p><code>\/\/ stylowanie wszystkich pozycji:<\/code><br \/>\n<code>for (const el of items) {<\/code><br \/>\n<code>el.style.color = \"blue\";<\/code><br \/>\n<code>el.style.fontWeight = \"bold\";<\/code><br \/>\n<code>}<\/code><\/p>\n<p data-start=\"2720\" data-end=\"2732\"><strong data-start=\"2720\" data-end=\"2732\">Pu\u0142apki:<\/strong><\/p>\n<ul>\n<li data-start=\"2735\" data-end=\"2834\">To <strong data-start=\"2738\" data-end=\"2750\">nie jest<\/strong> tablica. Je\u015bli chcesz metody tablicowe, zr\u00f3b:<br data-start=\"2796\" data-end=\"2799\" \/><code data-start=\"2801\" data-end=\"2833\">Array.from(items).forEach(...)<\/code>.<\/li>\n<li data-start=\"2735\" data-end=\"2834\">Przy <strong data-start=\"2842\" data-end=\"2854\">usuwaniu<\/strong> w p\u0119tli lepiej iterowa\u0107 \u201eod ko\u0144ca\u201d albo najpierw skopiowa\u0107 do tablicy, bo \u201e\u017cywa\u201d kolekcja zmienia si\u0119 w trakcie iteracji.<\/li>\n<\/ul>\n<p><code>const arr = Array.from(items);<\/code><br \/>\n<code>for (let i = arr.length - 1; i &gt;= 0; i--) {<\/code><br \/>\n<code>arr[i].remove();<\/code><br \/>\n<code>}<\/code><\/p>\n<p>Gdy potrzebujesz selektor\u00f3w CSS i <strong data-start=\"3133\" data-end=\"3147\">statycznej<\/strong> listy, wygodniejsze bywa <code data-start=\"3173\" data-end=\"3197\">querySelectorAll(\"li\")<\/code> (zwraca <code data-start=\"3206\" data-end=\"3216\">NodeList<\/code>, nie \u201e\u017cywe\u201d).<\/p>\n<p>&nbsp;<\/p>\n<h2 data-start=\"1853\" data-end=\"1939\">\u0106wiczenie 1: Zmieniamy elementy na stronie za pomoc\u0105 JavaScript<\/h2>\n<p>Teraz warto to prze\u0107wiczy\u0107. Zadaniem jest stworzenie prostej strony HTML, na kt\u00f3rej b\u0119dziesz zmienia\u0107 tre\u015b\u0107, wygl\u0105d i atrybuty element\u00f3w.<\/p>\n<p data-start=\"374\" data-end=\"417\"><strong>Zadanie 1. Stw\u00f3rz stron\u0119 HTML z poni\u017cszymi elementami:<\/strong><\/p>\n<ul>\n<li data-start=\"423\" data-end=\"472\">akapit <code data-start=\"430\" data-end=\"435\">&lt;p&gt;<\/code> z tekstem np. \u201eTo jest stary tekst\u201d,<\/li>\n<li data-start=\"423\" data-end=\"472\">przycisk <code data-start=\"487\" data-end=\"497\">&lt;button&gt;<\/code> z napisem \u201eZmie\u0144 tekst\u201d,<\/li>\n<li data-start=\"423\" data-end=\"472\">przycisk <code data-start=\"537\" data-end=\"547\">&lt;button&gt;<\/code> z napisem \u201eZmie\u0144 kolor\u201d,<\/li>\n<li data-start=\"423\" data-end=\"472\">obrazek <code data-start=\"586\" data-end=\"593\">&lt;img&gt;<\/code> (mo\u017ce by\u0107 np. <code data-start=\"608\" data-end=\"617\">kot.jpg<\/code>).<\/li>\n<\/ul>\n<p><strong>Zadanie 2. Napisz skrypt JavaScript, kt\u00f3ry:<\/strong><\/p>\n<ul>\n<li>po klikni\u0119ciu przycisku <strong data-start=\"686\" data-end=\"703\">\u201eZmie\u0144 tekst\u201d<\/strong> zmieni tre\u015b\u0107 akapitu na \u201eTo jest nowy tekst!\u201d<\/li>\n<li>po klikni\u0119ciu przycisku <strong data-start=\"780\" data-end=\"797\">\u201eZmie\u0144 kolor\u201d<\/strong> zmieni kolor akapitu na niebieski,<\/li>\n<li>dodatkowo podmieni obrazek z <code data-start=\"867\" data-end=\"876\">kot.jpg<\/code> na <code data-start=\"880\" data-end=\"890\">pies.jpg<\/code>.<\/li>\n<\/ul>\n<p><strong>Rozwi\u0105zanie<\/strong><\/p>\n<p><code>&lt;!DOCTYPE html&gt;<\/code><br \/>\n<code>&lt;html lang=\"pl\"&gt;<\/code><br \/>\n<code>&lt;head&gt;<\/code><br \/>\n<code>&lt;meta charset=\"UTF-8\"&gt;<\/code><br \/>\n<code>&lt;title&gt;\u0106wiczenie DOM&lt;\/title&gt;<\/code><br \/>\n<code>&lt;\/head&gt;<\/code><br \/>\n<code>&lt;body&gt;<\/code><br \/>\n<code>&lt;!-- Akapit --&gt;<\/code><br \/>\n<code>&lt;p id=\"tekst\"&gt;To jest stary tekst&lt;\/p&gt;<\/code><\/p>\n<p><code>&lt;!-- Przyciski --&gt;<\/code><br \/>\n<code>&lt;button onclick=\"zmienTekst()\"&gt;Zmie\u0144 tekst&lt;\/button&gt;<\/code><br \/>\n<code>&lt;button onclick=\"zmienKolor()\"&gt;Zmie\u0144 kolor&lt;\/button&gt;<\/code><\/p>\n<p><code>&lt;!-- Obrazek --&gt;<\/code><br \/>\n<code>&lt;img id=\"obrazek\" src=\"kot.jpg\" alt=\"Kot\" width=\"200\"&gt;<\/code><\/p>\n<p><code>&lt;script&gt;<\/code><br \/>\n<code>\/\/ Funkcja zmieniaj\u0105ca tre\u015b\u0107 akapitu<\/code><br \/>\n<code>function zmienTekst() {<\/code><br \/>\n<code>let element = document.getElementById(\"tekst\");<\/code><br \/>\n<code>element.innerHTML = \"To jest nowy tekst!\";<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>\/\/ Funkcja zmieniaj\u0105ca kolor akapitu<\/code><br \/>\n<code>function zmienKolor() {<\/code><br \/>\n<code>let element = document.getElementById(\"tekst\");<\/code><br \/>\n<code>element.style.color = \"blue\";<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>\/\/ Podmiana obrazka<\/code><br \/>\n<code>let obrazek = document.getElementById(\"obrazek\");<\/code><br \/>\n<code>obrazek.setAttribute(\"src\", \"pies.jpg\");<\/code><br \/>\n<code>&lt;\/script&gt;<\/code><br \/>\n<code>&lt;\/body&gt;<\/code><br \/>\n<code>&lt;\/html&gt;<\/code><\/p>\n<p>Kr\u00f3tki komentarz, przeanalizujmy co si\u0119 tutaj dzieje?<\/p>\n<ul data-start=\"1860\" data-end=\"2104\">\n<li data-start=\"1860\" data-end=\"1928\">\n<p data-start=\"1862\" data-end=\"1928\"><code data-start=\"1862\" data-end=\"1896\">document.getElementById(\"tekst\")<\/code> &#8211; &gt; wyszukuje akapit po <strong data-start=\"1919\" data-end=\"1925\">id<\/strong>.<\/p>\n<\/li>\n<li data-start=\"1929\" data-end=\"1974\">\n<p data-start=\"1931\" data-end=\"1974\"><code data-start=\"1931\" data-end=\"1950\">innerHTML = \"...\"<\/code> &#8211; &gt; zmienia jego tre\u015b\u0107.<\/p>\n<\/li>\n<li data-start=\"1975\" data-end=\"2038\">\n<p data-start=\"1977\" data-end=\"2038\"><code data-start=\"1977\" data-end=\"1999\">style.color = \"blue\"<\/code> &#8211; &gt; zmienia kolor tekstu na niebieski.<\/p>\n<\/li>\n<li data-start=\"2039\" data-end=\"2104\">\n<p data-start=\"2041\" data-end=\"2104\"><code data-start=\"2041\" data-end=\"2074\">setAttribute(\"src\", \"pies.jpg\")<\/code> &#8211; &gt; podmienia \u017ar\u00f3d\u0142o obrazka.<\/p>\n<\/li>\n<\/ul>\n<h2 data-start=\"207\" data-end=\"256\">\u0106wiczenie 2: Operacje na elementach dokumentu<\/h2>\n<p data-start=\"258\" data-end=\"365\">W tym \u0107wiczeniu nauczysz si\u0119 <strong data-start=\"287\" data-end=\"328\">dodawa\u0107, usuwa\u0107 i podmienia\u0107 elementy<\/strong> na stronie przy u\u017cyciu JavaScript.<\/p>\n<p data-start=\"389\" data-end=\"505\"><strong>Zadanie 1. <\/strong>Utw\u00f3rz prost\u0105 stron\u0119 HTML z nag\u0142\u00f3wkiem <code data-start=\"428\" data-end=\"434\">&lt;h2&gt;<\/code>, pustym kontenerem <code data-start=\"454\" data-end=\"481\">&lt;div id=\"kontener\"&gt;&lt;\/div&gt;<\/code> i trzema przyciskami:<\/p>\n<ul>\n<li data-start=\"511\" data-end=\"527\">\u201eDodaj akapit\u201d<\/li>\n<li data-start=\"511\" data-end=\"527\">\u201eUsu\u0144 akapit\u201d<\/li>\n<li data-start=\"511\" data-end=\"527\">\u201ePodmie\u0144 akapit\u201d<\/li>\n<li style=\"list-style-type: none;\"><\/li>\n<\/ul>\n<p><strong>Zadanie 2. <\/strong>Napisz skrypt, kt\u00f3ry:<\/p>\n<ul>\n<li>po klikni\u0119ciu \u201eDodaj akapit\u201d utworzy nowy element <code data-start=\"656\" data-end=\"661\">&lt;p&gt;<\/code> z tekstem \u201eJestem nowym akapitem\u201d i doda go do kontenera,<\/li>\n<li>po klikni\u0119ciu \u201eUsu\u0144 akapit\u201d usunie ostatni dodany akapit,<\/li>\n<li>po klikni\u0119ciu \u201ePodmie\u0144 akapit\u201d zamieni istniej\u0105cy akapit na inny z tre\u015bci\u0105 \u201eZosta\u0142em podmieniony\u201d.<\/li>\n<\/ul>\n<p><strong>Rozwi\u0105zanie<\/strong><\/p>\n<p><code>&lt;!DOCTYPE html&gt;<\/code><br \/>\n<code>&lt;html lang=\"pl\"&gt;<\/code><br \/>\n<code>&lt;head&gt;<\/code><br \/>\n<code>&lt;meta charset=\"UTF-8\"&gt;<\/code><br \/>\n<code>&lt;title&gt;\u0106wiczenie DOM 2&lt;\/title&gt;<\/code><br \/>\n<code>&lt;\/head&gt;<\/code><br \/>\n<code>&lt;body&gt;<\/code><br \/>\n<code>&lt;h2&gt;\u0106wiczenie 2: Operacje na elementach&lt;\/h2&gt;<\/code><\/p>\n<p><code>&lt;!-- Kontener --&gt;<\/code><br \/>\n<code>&lt;div id=\"kontener\"&gt;&lt;\/div&gt;<\/code><\/p>\n<p><code>&lt;!-- Przyciski --&gt;<\/code><br \/>\n<code>&lt;button onclick=\"dodajAkapit()\"&gt;Dodaj akapit&lt;\/button&gt;<\/code><br \/>\n<code>&lt;button onclick=\"usunAkapit()\"&gt;Usu\u0144 akapit&lt;\/button&gt;<\/code><br \/>\n<code>&lt;button onclick=\"podmienAkapit()\"&gt;Podmie\u0144 akapit&lt;\/button&gt;<\/code><\/p>\n<p><code>&lt;script&gt;<\/code><br \/>\n<code>let kontener = document.getElementById(\"kontener\");<\/code><\/p>\n<p><code>\/\/ Dodawanie nowego akapitu<\/code><br \/>\n<code>function dodajAkapit() {<\/code><br \/>\n<code>let nowy = document.createElement(\"p\");<\/code><br \/>\n<code>nowy.innerHTML = \"Jestem nowym akapitem\";<\/code><br \/>\n<code>kontener.appendChild(nowy);<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>\/\/ Usuwanie ostatniego akapitu<\/code><br \/>\n<code>function usunAkapit() {<\/code><br \/>\n<code>if (kontener.lastChild) {<\/code><br \/>\n<code>kontener.removeChild(kontener.lastChild);<\/code><br \/>\n<code>}<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>\/\/ Podmiana pierwszego akapitu<\/code><br \/>\n<code>function podmienAkapit() {<\/code><br \/>\n<code>if (kontener.firstChild) {<\/code><br \/>\n<code>let nowy = document.createElement(\"p\");<\/code><br \/>\n<code>nowy.innerHTML = \"Zosta\u0142em podmieniony\";<\/code><br \/>\n<code>kontener.replaceChild(nowy, kontener.firstChild);<\/code><br \/>\n<code>}<\/code><br \/>\n<code>}<\/code><br \/>\n<code>&lt;\/script&gt;<\/code><br \/>\n<code>&lt;\/body&gt;<\/code><br \/>\n<code>&lt;\/html&gt;<\/code><\/p>\n<p data-start=\"2057\" data-end=\"2073\"><strong>Wyja\u015bnienie<\/strong><\/p>\n<ul data-start=\"2075\" data-end=\"2318\">\n<li data-start=\"2075\" data-end=\"2130\">\n<p data-start=\"2077\" data-end=\"2130\"><code data-start=\"2077\" data-end=\"2097\">createElement(\"p\")<\/code> -&gt; tworzy nowy element akapitu.<\/p>\n<\/li>\n<li data-start=\"2131\" data-end=\"2189\">\n<p data-start=\"2133\" data-end=\"2189\"><code data-start=\"2133\" data-end=\"2152\">appendChild(nowy)<\/code> -&gt; dodaje nowy akapit do kontenera.<\/p>\n<\/li>\n<li data-start=\"2190\" data-end=\"2251\">\n<p data-start=\"2192\" data-end=\"2251\"><code data-start=\"2192\" data-end=\"2210\">removeChild(...)<\/code> -&gt; usuwa wskazany element z drzewa DOM.<\/p>\n<\/li>\n<li data-start=\"2252\" data-end=\"2318\">\n<p data-start=\"2254\" data-end=\"2318\"><code data-start=\"2254\" data-end=\"2281\">replaceChild(nowy, stary)<\/code> -&gt; podmienia stary element na nowy.<\/p>\n<\/li>\n<\/ul>\n<h2 data-start=\"177\" data-end=\"220\">\u0106wiczenie 3: Interaktywna lista zakup\u00f3w<\/h2>\n<p data-start=\"222\" data-end=\"343\">W tym \u0107wiczeniu stworzymy prost\u0105 list\u0119 zakup\u00f3w, do kt\u00f3rej mo\u017cna dodawa\u0107 nowe produkty, usuwa\u0107 je i zmienia\u0107 ich wygl\u0105d.<\/p>\n<p data-start=\"367\" data-end=\"390\"><strong>Zadanie 1.<\/strong> Utw\u00f3rz stron\u0119 HTML z:<\/p>\n<ul>\n<li data-start=\"396\" data-end=\"439\">nag\u0142\u00f3wkiem <code data-start=\"407\" data-end=\"436\">&lt;h2&gt;Moja lista zakup\u00f3w&lt;\/h2&gt;<\/code>,<\/li>\n<li data-start=\"445\" data-end=\"482\">pust\u0105 list\u0105 <code data-start=\"457\" data-end=\"479\">&lt;ul id=\"lista\"&gt;&lt;\/ul&gt;<\/code>,<\/li>\n<li data-start=\"488\" data-end=\"537\">polem tekstowym <code data-start=\"504\" data-end=\"513\">&lt;input&gt;<\/code> do wpisania produktu,<\/li>\n<li data-start=\"488\" data-end=\"537\">trzema przyciskami: \u201eDodaj produkt\u201d, \u201eUsu\u0144 ostatni\u201d, \u201ePokoloruj list\u0119\u201d.<\/li>\n<\/ul>\n<p data-start=\"621\" data-end=\"644\"><strong>Zadanie 2.<\/strong> Napisz skrypt, kt\u00f3ry:<\/p>\n<ul>\n<li data-start=\"621\" data-end=\"644\">doda nowy produkt wpisany w polu tekstowym do listy,<\/li>\n<li data-start=\"621\" data-end=\"644\">usunie ostatni element listy,<\/li>\n<li data-start=\"621\" data-end=\"644\">zmieni kolor wszystkich element\u00f3w listy na niebieski.<\/li>\n<\/ul>\n<p><strong>Rozwi\u0105zanie<\/strong><\/p>\n<p><code>&lt;!DOCTYPE html&gt;<\/code><br \/>\n<code>&lt;html lang=\"pl\"&gt;<\/code><br \/>\n<code>&lt;head&gt;<\/code><br \/>\n<code>&lt;meta charset=\"UTF-8\"&gt;<\/code><br \/>\n<code>&lt;title&gt;\u0106wiczenie DOM 3&lt;\/title&gt;<\/code><br \/>\n<code>&lt;\/head&gt;<\/code><br \/>\n<code>&lt;body&gt;<\/code><br \/>\n<code>&lt;h2&gt;Moja lista zakup\u00f3w&lt;\/h2&gt;<\/code><\/p>\n<p><code>&lt;!-- Pole tekstowe --&gt;<\/code><br \/>\n<code>&lt;input type=\"text\" id=\"produkt\" placeholder=\"Wpisz produkt\"&gt;<\/code><br \/>\n<code>&lt;br&gt;&lt;br&gt;<\/code><\/p>\n<p><code>&lt;!-- Lista --&gt;<\/code><br \/>\n<code>&lt;ul id=\"lista\"&gt;&lt;\/ul&gt;<\/code><\/p>\n<p><code>&lt;!-- Przyciski --&gt;<\/code><br \/>\n<code>&lt;button onclick=\"dodajProdukt()\"&gt;Dodaj produkt&lt;\/button&gt;<\/code><br \/>\n<code>&lt;button onclick=\"usunProdukt()\"&gt;Usu\u0144 ostatni&lt;\/button&gt;<\/code><br \/>\n<code>&lt;button onclick=\"pokolorujListe()\"&gt;Pokoloruj list\u0119&lt;\/button&gt;<\/code><\/p>\n<p><code>&lt;script&gt;<\/code><br \/>\n<code>let lista = document.getElementById(\"lista\");<\/code><\/p>\n<p><code>\/\/ Dodawanie nowego produktu do listy<\/code><br \/>\n<code>function dodajProdukt() {<\/code><br \/>\n<code>let input = document.getElementById(\"produkt\");<\/code><br \/>\n<code>if (input.value.trim() !== \"\") {<\/code><br \/>\n<code>let nowy = document.createElement(\"li\");<\/code><br \/>\n<code>nowy.innerHTML = input.value;<\/code><br \/>\n<code>lista.appendChild(nowy);<\/code><br \/>\n<code>input.value = \"\"; \/\/ czy\u015bcimy pole po dodaniu<\/code><br \/>\n<code>}<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>\/\/ Usuwanie ostatniego produktu<\/code><br \/>\n<code>function usunProdukt() {<\/code><br \/>\n<code>if (lista.lastChild) {<\/code><br \/>\n<code>lista.removeChild(lista.lastChild);<\/code><br \/>\n<code>}<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>\/\/ Zmiana koloru ca\u0142ej listy<\/code><br \/>\n<code>function pokolorujListe() {<\/code><br \/>\n<code>let produkty = lista.getElementsByTagName(\"li\");<\/code><br \/>\n<code>for (let i = 0; i &lt; produkty.length; i++) {<\/code><br \/>\n<code>produkty[i].style.color = \"blue\";<\/code><br \/>\n<code>produkty[i].style.fontWeight = \"bold\";<\/code><br \/>\n<code>}<\/code><br \/>\n<code>}<\/code><br \/>\n<code>&lt;\/script&gt;<\/code><br \/>\n<code>&lt;\/body&gt;<\/code><br \/>\n<code>&lt;\/html&gt;<\/code><\/p>\n<p><strong>Wyja\u015bnienie<\/strong><\/p>\n<ul>\n<li data-start=\"2218\" data-end=\"2270\"><code data-start=\"2218\" data-end=\"2243\">getElementById(\"lista\")<\/code> -&gt; pobiera list\u0119 zakup\u00f3w.<\/li>\n<li data-start=\"2218\" data-end=\"2270\"><code data-start=\"2273\" data-end=\"2294\">createElement(\"li\")<\/code> -&gt; tworzy nowy punkt listy.<\/li>\n<li data-start=\"2218\" data-end=\"2270\"><code data-start=\"2326\" data-end=\"2344\">appendChild(...)<\/code> -&gt; dodaje produkt na ko\u0144cu listy.<\/li>\n<li data-start=\"2218\" data-end=\"2270\"><code data-start=\"2382\" data-end=\"2400\">removeChild(...)<\/code> -&gt; usuwa ostatni element listy.<\/li>\n<li data-start=\"2218\" data-end=\"2270\"><code data-start=\"2436\" data-end=\"2464\">getElementsByTagName(\"li\")<\/code> -&gt; pobiera wszystkie produkty w li\u015bcie i pozwala zmienia\u0107 ich styl w p\u0119tli.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Model DOM (Document Object Model) to spos\u00f3b, w jaki JavaScript \u201ewidzi\u201d stron\u0119 internetow\u0105. Dzi\u0119ki niemu mo\u017cemy wyszukiwa\u0107 elementy, zmienia\u0107 ich zawarto\u015b\u0107, a tak\u017ce dodawa\u0107 i usuwa\u0107 nowe elementy. Zobaczmy najwa\u017cniejsze metody i operacje, kt\u00f3re powinien zna\u0107 ka\u017cdy pocz\u0105tkuj\u0105cy programista.<\/p>\n","protected":false},"author":1,"featured_media":260,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[44],"tags":[],"class_list":["post-1234","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-html5-css3-javascript"],"_links":{"self":[{"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/posts\/1234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/comments?post=1234"}],"version-history":[{"count":5,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/posts\/1234\/revisions"}],"predecessor-version":[{"id":1239,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/posts\/1234\/revisions\/1239"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/media\/260"}],"wp:attachment":[{"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/media?parent=1234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/categories?post=1234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/tags?post=1234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}