{"id":36545,"date":"2025-12-19T17:41:27","date_gmt":"2025-12-19T14:41:27","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=36545"},"modified":"2025-12-19T17:41:27","modified_gmt":"2025-12-19T14:41:27","slug":"dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/","title":{"rendered":"DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma"},"content":{"rendered":"<h2>DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma<\/h2>\n<h3>Giri\u015f: DOM Nedir ve Neden \u00d6nemlidir?<\/h3>\n<p>Web sayfalar\u0131, kullan\u0131c\u0131larla etkile\u015fime giren dinamik aray\u00fczler sunmak i\u00e7in s\u00fcrekli olarak g\u00fcncellenir ve de\u011fi\u015ftirilir. Bu dinamizmi sa\u011flayan temel mekanizma, Belge Nesne Modeli (Document Object Model &#8211; DOM) ve JavaScript&#8217;in bu model \u00fczerinde yapt\u0131\u011f\u0131 manip\u00fclasyonlard\u0131r. Bir web sayfas\u0131 y\u00fcklendi\u011finde, taray\u0131c\u0131 HTML kodunu ayr\u0131\u015ft\u0131r\u0131r ve bu kodun her bir b\u00f6l\u00fcm\u00fcn\u00fc bir nesne olarak temsil eden bir a\u011fa\u00e7 yap\u0131s\u0131 olu\u015fturur. Bu a\u011fa\u00e7 yap\u0131s\u0131, DOM olarak adland\u0131r\u0131l\u0131r. DOM, JavaScript gibi programlama dillerinin, sayfan\u0131n i\u00e7eri\u011fini, yap\u0131s\u0131n\u0131 ve stilini dinamik olarak de\u011fi\u015ftirmesine olanak tan\u0131yan bir aray\u00fcz sa\u011flar.<\/p>\n<h4>DOM&#8217;un Tan\u0131m\u0131<\/h4>\n<p>DOM, bir HTML veya XML belgesinin programatik bir temsilidir. Belgedeki her eleman (etiket, metin, nitelik vb.) bir &#8220;d\u00fc\u011f\u00fcm&#8221; (node) olarak temsil edilir. Bu d\u00fc\u011f\u00fcmler, hiyerar\u015fik bir a\u011fa\u00e7 yap\u0131s\u0131 i\u00e7inde d\u00fczenlenir. En \u00fcstteki d\u00fc\u011f\u00fcm, <code>document<\/code> nesnesidir ve t\u00fcm di\u011fer elemanlar bu nesnenin alt\u0131ndad\u0131r. DOM, web geli\u015ftiricilerine JavaScript arac\u0131l\u0131\u011f\u0131yla bu d\u00fc\u011f\u00fcmlere eri\u015fme, onlar\u0131 de\u011fi\u015ftirme, yeni d\u00fc\u011f\u00fcmler olu\u015fturma ve mevcut d\u00fc\u011f\u00fcmleri silme yetene\u011fi sunar. Bu sayede, kullan\u0131c\u0131 etkile\u015fimlerine yan\u0131t veren, verileri dinamik olarak y\u00fckleyen veya sayfa i\u00e7eri\u011fini an\u0131nda g\u00fcncelleyen web uygulamalar\u0131 geli\u015ftirmek m\u00fcmk\u00fcn hale gelir.<\/p>\n<h4>DOM&#8217;un Yap\u0131s\u0131: A\u011fa\u00e7 Modeli<\/h4>\n<p>DOM, bir a\u011fa\u00e7 yap\u0131s\u0131 olarak g\u00f6rselle\u015ftirilebilir. Bu yap\u0131n\u0131n en tepesinde <code>document<\/code> nesnesi bulunur. <code>document<\/code> nesnesinin alt\u0131nda, <code><html><\/code> etiketiyle temsil edilen k\u00f6k eleman yer al\u0131r. <code><html><\/code> eleman\u0131n\u0131n alt\u0131nda ise <code><body><\/code> ve <code><head><\/code> gibi elemanlar bulunur. Her eleman, kendi i\u00e7inde ba\u015fka elemanlar\u0131 (\u00e7ocuklar\u0131) bar\u0131nd\u0131rabilir ve ayn\u0131 seviyede ba\u015fka elemanlarla (karde\u015fleri) birlikte bulunabilir. \u00d6rne\u011fin, bir <code><\/p>\n<div><\/code> eleman\u0131n\u0131n i\u00e7inde birden fazla <code><\/p>\n<p><\/code> etiketi olabilir ve bu <code><\/p>\n<p><\/code> etiketleri birbirinin karde\u015fi olurken, <code><\/p>\n<div><\/code> etiketi de onlar\u0131n ebeveyni olur. Bu hiyerar\u015fik yap\u0131, JavaScript&#8217;in belirli bir eleman\u0131 hedeflemesini, onun \u00e7ocuklar\u0131na veya ebeveynine ula\u015fmas\u0131n\u0131 ve b\u00f6ylece sayfan\u0131n herhangi bir b\u00f6l\u00fcm\u00fcn\u00fc manip\u00fcle etmesini kolayla\u015ft\u0131r\u0131r.<\/p>\n<h4>Web Geli\u015ftirmedeki Rol\u00fc<\/h4>\n<p>DOM, modern web geli\u015ftirmenin temel ta\u015flar\u0131ndan biridir. Kullan\u0131c\u0131 etkile\u015fimlerini y\u00f6netmek (t\u0131klamalar, form g\u00f6nderimleri, klavye giri\u015fleri), sunucudan gelen verileri sayfaya yans\u0131tmak, animasyonlar ve g\u00f6rsel efektler olu\u015fturmak, form do\u011frulama yapmak ve genel olarak web sayfalar\u0131n\u0131 statik olmaktan \u00e7\u0131kar\u0131p dinamik ve etkile\u015fimli hale getirmek i\u00e7in DOM manip\u00fclasyonu ka\u00e7\u0131n\u0131lmazd\u0131r. JavaScript, bu manip\u00fclasyonlar\u0131 ger\u00e7ekle\u015ftirmek i\u00e7in taray\u0131c\u0131 taraf\u0131ndan sa\u011flanan DOM API&#8217;lerini kullan\u0131r. Bu makale, JavaScript kullanarak DOM \u00fczerinde nas\u0131l de\u011fi\u015fiklikler yap\u0131laca\u011f\u0131n\u0131, elemanlara nas\u0131l eri\u015filece\u011fini, yeni elemanlar\u0131n nas\u0131l olu\u015fturulup eklenece\u011fini, mevcut elemanlar\u0131n nas\u0131l g\u00fcncellenip silinece\u011fini ve olay dinleyicileriyle nas\u0131l etkile\u015fim kurulaca\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde a\u00e7\u0131klayacakt\u0131r.<\/p>\n<h3>DOM Elemanlar\u0131na Eri\u015fme Y\u00f6ntemleri<\/h3>\n<p>DOM \u00fczerinde herhangi bir de\u011fi\u015fiklik yapmadan \u00f6nce, hedef elemana eri\u015fmemiz gerekir. JavaScript, bu ama\u00e7la \u00e7e\u015fitli y\u00f6ntemler sunar. Do\u011fru y\u00f6ntemi se\u00e7mek, performans ve kod okunabilirli\u011fi a\u00e7\u0131s\u0131ndan \u00f6nemlidir.<\/p>\n<h4>ID ile Eri\u015fme: <code>getElementById()<\/code><\/h4>\n<p><code>document.getElementById()<\/code> y\u00f6ntemi, bir HTML eleman\u0131na benzersiz <code>id<\/code> niteli\u011fi arac\u0131l\u0131\u011f\u0131yla eri\u015fmenin en h\u0131zl\u0131 ve en do\u011frudan yoludur. Her <code>id<\/code> de\u011feri belgede yaln\u0131zca bir kez kullan\u0131lmal\u0131d\u0131r. E\u011fer belirtilen <code>id<\/code>&#8216;ye sahip bir eleman bulunamazsa, y\u00f6ntem <code>null<\/code> d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <div id=\"myDiv\">Merhaba D\u00fcnya<\/div>\nconst myDiv = document.getElementById('myDiv');\nconsole.log(myDiv.textContent); \/\/ \"Merhaba D\u00fcnya\"<\/code><\/pre>\n<h4>S\u0131n\u0131f Ad\u0131 ile Eri\u015fme: <code>getElementsByClassName()<\/code><\/h4>\n<p><code>document.getElementsByClassName()<\/code> y\u00f6ntemi, belirli bir s\u0131n\u0131f ad\u0131na sahip t\u00fcm elemanlar\u0131 i\u00e7eren canl\u0131 bir <code>HTMLCollection<\/code> d\u00f6nd\u00fcr\u00fcr. &#8220;Canl\u0131&#8221; olmas\u0131, DOM&#8217;da yap\u0131lan de\u011fi\u015fikliklerin bu koleksiyonu otomatik olarak g\u00fcncellemesi anlam\u0131na gelir. E\u011fer e\u015fle\u015fen eleman bulunamazsa bo\u015f bir koleksiyon d\u00f6nd\u00fcr\u00fcl\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <p class=\"myClass\">Paragraf 1<\/p><p class=\"myClass\">Paragraf 2<\/p>\nconst paragraphs = document.getElementsByClassName('myClass');\nconsole.log(paragraphs.length); \/\/ 2\nconsole.log(paragraphs[0].textContent); \/\/ \"Paragraf 1\"<\/code><\/pre>\n<h4>Etiket Ad\u0131 ile Eri\u015fme: <code>getElementsByTagName()<\/code><\/h4>\n<p><code>document.getElementsByTagName()<\/code> y\u00f6ntemi, belirtilen etiket ad\u0131na (\u00f6rne\u011fin, <code>p<\/code>, <code>div<\/code>, <code>a<\/code>) sahip t\u00fcm elemanlar\u0131 i\u00e7eren canl\u0131 bir <code>HTMLCollection<\/code> d\u00f6nd\u00fcr\u00fcr. T\u0131pk\u0131 <code>getElementsByClassName()<\/code> gibi, bu da canl\u0131 bir koleksiyondur.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <ul><li>\u00d6\u011fe 1<\/li><li>\u00d6\u011fe 2<\/li><\/ul>\nconst listItems = document.getElementsByTagName('li');\nconsole.log(listItems.length); \/\/ 2\nconsole.log(listItems[1].textContent); \/\/ \"\u00d6\u011fe 2\"<\/code><\/pre>\n<h4>CSS Se\u00e7iciler ile Eri\u015fme: <code>querySelector()<\/code> ve <code>querySelectorAll()<\/code><\/h4>\n<p>Bu iki y\u00f6ntem, modern web geli\u015ftirmenin en g\u00fc\u00e7l\u00fc ve esnek eleman eri\u015fim ara\u00e7lar\u0131d\u0131r. CSS se\u00e7icilerini kullanarak elemanlara eri\u015fmenizi sa\u011flarlar.<\/p>\n<p>*   <strong><code>document.querySelector()<\/code>:<\/strong> Belirtilen CSS se\u00e7iciyle e\u015fle\u015fen ilk eleman\u0131 d\u00f6nd\u00fcr\u00fcr. E\u011fer e\u015fle\u015fen bir eleman bulunamazsa <code>null<\/code> d\u00f6nd\u00fcr\u00fcr. Tek bir elemana ihtiyac\u0131n\u0131z oldu\u011funda idealdir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <div id=\"container\"><p class=\"text\">\u0130lk metin<\/p><p class=\"text\">\u0130kinci metin<\/p><\/div>\n    const firstParagraph = document.querySelector('#container .text');\n    console.log(firstParagraph.textContent); \/\/ \"\u0130lk metin\"<\/code><\/pre>\n<p>*   <strong><code>document.querySelectorAll()<\/code>:<\/strong> Belirtilen CSS se\u00e7iciyle e\u015fle\u015fen t\u00fcm elemanlar\u0131 i\u00e7eren statik bir <code>NodeList<\/code> d\u00f6nd\u00fcr\u00fcr. &#8220;Statik&#8221; olmas\u0131, DOM&#8217;da yap\u0131lan de\u011fi\u015fikliklerin bu listeyi otomatik olarak g\u00fcncellemedi\u011fi anlam\u0131na gelir. E\u011fer e\u015fle\u015fen eleman bulunamazsa bo\u015f bir <code>NodeList<\/code> d\u00f6nd\u00fcr\u00fcl\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">const allParagraphs = document.querySelectorAll('.text');\n    console.log(allParagraphs.length); \/\/ 2\n    allParagraphs.forEach(p => console.log(p.textContent));\n    \/\/ \u00c7\u0131kt\u0131: \"\u0130lk metin\", \"\u0130kinci metin\"<\/code><\/pre>\n<p><code>querySelector<\/code> ve <code>querySelectorAll<\/code>, ID, s\u0131n\u0131f, etiket, nitelik se\u00e7icileri ve bunlar\u0131n kombinasyonlar\u0131 dahil olmak \u00fczere herhangi bir ge\u00e7erli CSS se\u00e7icisini kullanabilir. Bu, onlar\u0131 elemanlara eri\u015fim i\u00e7in son derece esnek k\u0131lar.<\/p>\n<h4>Traversal Y\u00f6ntemleri: Ebeveyn, \u00c7ocuk, Karde\u015f Elemanlara Eri\u015fim<\/h4>\n<p>Bazen do\u011frudan bir se\u00e7ici kullanmak yerine, zaten eri\u015fti\u011fimiz bir elemandan yola \u00e7\u0131karak di\u011fer elemanlara (ebeveyn, \u00e7ocuk veya karde\u015f) ula\u015fmak isteyebiliriz. Bu, DOM&#8217;un a\u011fa\u00e7 yap\u0131s\u0131ndan faydalanarak yap\u0131l\u0131r.<\/p>\n<p>*   <strong><code>parentNode<\/code>:<\/strong> Bir eleman\u0131n do\u011frudan ebeveyn d\u00fc\u011f\u00fcm\u00fcn\u00fc d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <div id=\"parent\"><p id=\"child\">Ben \u00e7ocu\u011fum<\/p><\/div>\n    const child = document.getElementById('child');\n    const parent = child.parentNode;\n    console.log(parent.id); \/\/ \"parent\"<\/code><\/pre>\n<p>*   <strong><code>children<\/code>:<\/strong> Bir eleman\u0131n t\u00fcm \u00e7ocuk elemanlar\u0131n\u0131 (yaln\u0131zca eleman d\u00fc\u011f\u00fcmleri, metin d\u00fc\u011f\u00fcmleri de\u011fil) i\u00e7eren canl\u0131 bir <code>HTMLCollection<\/code> d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <ul id=\"myList\"><li>\u00d6\u011fe 1<\/li><li>\u00d6\u011fe 2<\/li><\/ul>\n    const myList = document.getElementById('myList');\n    const children = myList.children;\n    console.log(children.length); \/\/ 2<\/code><\/pre>\n<p>*   <strong><code>firstChild<\/code> \/ <code>lastChild<\/code>:<\/strong> Bir eleman\u0131n ilk\/son \u00e7ocuk d\u00fc\u011f\u00fcm\u00fcn\u00fc (metin veya yorum d\u00fc\u011f\u00fcmleri dahil) d\u00f6nd\u00fcr\u00fcr.<br \/>\n<em>   <strong><code>firstElementChild<\/code> \/ <code>lastElementChild<\/code>:<\/strong> Bir eleman\u0131n ilk\/son \u00e7ocuk <\/em>eleman* d\u00fc\u011f\u00fcm\u00fcn\u00fc d\u00f6nd\u00fcr\u00fcr. Genellikle bu ikisi tercih edilir, \u00e7\u00fcnk\u00fc metin d\u00fc\u011f\u00fcmlerini g\u00f6z ard\u0131 ederler.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <div id=\"container\"> \u0130lk metin <span>Span<\/span> Son metin <\/div>\n    const container = document.getElementById('container');\n    console.log(container.firstChild); \/\/ Metin d\u00fc\u011f\u00fcm\u00fc\n    console.log(container.firstElementChild.tagName); \/\/ \"SPAN\"<\/code><\/pre>\n<p><em>   <strong><code>nextElementSibling<\/code> \/ <code>previousElementSibling<\/code>:<\/strong> Bir eleman\u0131n DOM a\u011fac\u0131ndaki bir sonraki\/\u00f6nceki karde\u015f <\/em>eleman* d\u00fc\u011f\u00fcm\u00fcn\u00fc d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <p id=\"p1\">Paragraf 1<\/p><p id=\"p2\">Paragraf 2<\/p>\n    const p1 = document.getElementById('p1');\n    const p2 = p1.nextElementSibling;\n    console.log(p2.id); \/\/ \"p2\"<\/code><\/pre>\n<p>Bu y\u00f6ntemler, belirli bir eleman\u0131n konumuna g\u00f6re di\u011fer elemanlara eri\u015fmek i\u00e7in son derece kullan\u0131\u015fl\u0131d\u0131r ve karma\u015f\u0131k DOM yap\u0131lar\u0131nda gezinmeyi sa\u011flar.<\/p>\n<h3>Yeni DOM Elemanlar\u0131 Olu\u015fturma ve Ekleme<\/h3>\n<p>Web sayfalar\u0131na dinamik olarak i\u00e7erik eklemek, DOM manip\u00fclasyonunun en yayg\u0131n kullan\u0131mlar\u0131ndan biridir. JavaScript, yeni HTML elemanlar\u0131 olu\u015fturup bunlar\u0131 mevcut DOM&#8217;a eklemek i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lar sunar.<\/p>\n<h4>Eleman Olu\u015fturma: <code>createElement()<\/code><\/h4>\n<p><code>document.createElement()<\/code> y\u00f6ntemi, belirtilen etiket ad\u0131na sahip yeni bir HTML eleman\u0131 olu\u015fturur. Bu eleman, hen\u00fcz DOM&#8217;a eklenmemi\u015ftir; sadece haf\u0131zada bir nesne olarak var olur.<\/p>\n<pre><code class=\"language-javascript\">const newDiv = document.createElement('div'); \/\/ Yeni bir <div> eleman\u0131 olu\u015fturur\nconst newParagraph = document.createElement('p'); \/\/ Yeni bir <p> eleman\u0131 olu\u015fturur<\/code><\/pre>\n<h4>Metin D\u00fc\u011f\u00fcm\u00fc Olu\u015fturma: <code>createTextNode()<\/code><\/h4>\n<p>Bir eleman\u0131n i\u00e7ine metin eklemek i\u00e7in <code>textContent<\/code> veya <code>innerHTML<\/code> kullan\u0131labilece\u011fi gibi, do\u011frudan bir metin d\u00fc\u011f\u00fcm\u00fc de olu\u015fturulabilir. <code>document.createTextNode()<\/code> y\u00f6ntemi, belirtilen metin i\u00e7eri\u011fine sahip yeni bir metin d\u00fc\u011f\u00fcm\u00fc olu\u015fturur.<\/p>\n<pre><code class=\"language-javascript\">const textNode = document.createTextNode('Bu yeni bir metin.');<\/code><\/pre>\n<p>Bu metin d\u00fc\u011f\u00fcm\u00fc daha sonra bir elemana <code>appendChild()<\/code> ile eklenebilir.<\/p>\n<h4>Elemanlar\u0131 Ekleme: <code>appendChild()<\/code>, <code>insertBefore()<\/code><\/h4>\n<p>Olu\u015fturulan elemanlar\u0131 veya metin d\u00fc\u011f\u00fcmlerini DOM&#8217;a eklemek i\u00e7in \u00e7e\u015fitli y\u00f6ntemler bulunur:<\/p>\n<p>*   <strong><code>parentNode.appendChild(childNode)<\/code>:<\/strong> Belirtilen <code>childNode<\/code>&#8216;u, <code>parentNode<\/code>&#8216;un son \u00e7ocu\u011fu olarak ekler.<\/p>\n<pre><code class=\"language-javascript\">const container = document.getElementById('container'); \/\/ Mevcut bir eleman\n    const newDiv = document.createElement('div');\n    newDiv.textContent = 'Yeni Div \u0130\u00e7eri\u011fi';\n    container.appendChild(newDiv); \/\/ container i\u00e7ine newDiv'i ekler<\/code><\/pre>\n<p>*   <strong><code>parentNode.insertBefore(newNode, referenceNode)<\/code>:<\/strong> <code>newNode<\/code>&#8216;u, <code>parentNode<\/code>&#8216;un \u00e7ocuklar\u0131 aras\u0131na, <code>referenceNode<\/code>&#8216;dan hemen \u00f6nce ekler.<\/p>\n<pre><code class=\"language-javascript\">const list = document.getElementById('myList'); \/\/ Mevcut bir <ul>\n    const newItem = document.createElement('li');\n    newItem.textContent = 'Yeni \u00d6\u011fe';\n    const firstItem = list.firstElementChild; \/\/ Listenin ilk \u00f6\u011fesi\n    list.insertBefore(newItem, firstItem); \/\/ Yeni \u00f6\u011feyi ilk \u00f6\u011feden \u00f6nce ekler<\/code><\/pre>\n<p>*   <strong><code>element.append()<\/code> ve <code>element.prepend()<\/code>:<\/strong> Bu modern y\u00f6ntemler, bir eleman\u0131n i\u00e7ine birden fazla d\u00fc\u011f\u00fcm veya metin eklemeye olanak tan\u0131r. <code>append()<\/code> sona, <code>prepend()<\/code> ba\u015fa ekler.<\/p>\n<pre><code class=\"language-javascript\">const container = document.getElementById('container');\n    const p1 = document.createElement('p');\n    p1.textContent = 'Paragraf 1';\n    const p2 = document.createElement('p');\n    p2.textContent = 'Paragraf 2';\n    container.append(p1, p2, 'Metin de ekleyebiliriz.'); \/\/ Birden fazla eleman ve metin ekler<\/code><\/pre>\n<p>*   <strong><code>element.before()<\/code> ve <code>element.after()<\/code>:<\/strong> Bir eleman\u0131n kendisinden \u00f6nce veya sonra karde\u015f eleman olarak eklemeye yarar.<\/p>\n<pre><code class=\"language-javascript\">const existingElement = document.getElementById('existing');\n    const newSibling = document.createElement('span');\n    newSibling.textContent = 'Yeni Karde\u015f';\n    existingElement.before(newSibling); \/\/ existingElement'ten \u00f6nce ekler<\/code><\/pre>\n<h4>\u00d6rnek Senaryo: Dinamik Liste Olu\u015fturma<\/h4>\n<p>Bir JavaScript dizisinden dinamik olarak bir liste (ul\/li) olu\u015fturma:<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <ul id=\"dynamicList\"><\/ul>\nconst data = ['Elma', 'Armut', 'Muz', '\u00c7ilek'];\nconst dynamicList = document.getElementById('dynamicList');\n\ndata.forEach(itemText => {\n    const listItem = document.createElement('li'); \/\/ Yeni <li> olu\u015ftur\n    listItem.textContent = itemText; \/\/ Metin i\u00e7eri\u011fini ayarla\n    dynamicList.appendChild(listItem); \/\/ <ul>'ye <li>'yi ekle\n});\n\/\/ Sonu\u00e7: <ul><li>Elma<\/li><li>Armut<\/li><li>Muz<\/li><li>\u00c7ilek<\/li><\/ul><\/code><\/pre>\n<h3>Mevcut DOM Elemanlar\u0131n\u0131 G\u00fcncelleme<\/h3>\n<p>Var olan elemanlar\u0131n i\u00e7eri\u011fini, niteliklerini veya stilini de\u011fi\u015ftirmek, DOM manip\u00fclasyonunun en s\u0131k kar\u015f\u0131la\u015f\u0131lan g\u00f6revlerinden biridir.<\/p>\n<h4>Metin \u0130\u00e7eri\u011fini De\u011fi\u015ftirme: <code>textContent<\/code> ve <code>innerHTML<\/code><\/h4>\n<p>*   <strong><code>element.textContent<\/code>:<\/strong> Bir eleman\u0131n ve onun t\u00fcm alt elemanlar\u0131n\u0131n sadece metin i\u00e7eri\u011fini al\u0131r veya ayarlar. HTML etiketlerini metin olarak ele al\u0131r ve g\u00fcvenlik a\u00e7\u0131s\u0131ndan daha g\u00fcvenlidir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <p id=\"myParagraph\">Eski Metin<\/p>\n    const myParagraph = document.getElementById('myParagraph');\n    myParagraph.textContent = 'Yeni Metin'; \/\/ <p>Yeni Metin<\/p>\n    myParagraph.textContent = '<b>Kal\u0131n Metin<\/b>'; \/\/ <p>&lt;b&gt;Kal\u0131n Metin&lt;\/b&gt;<\/p><\/code><\/pre>\n<p>*   <strong><code>element.innerHTML<\/code>:<\/strong> Bir eleman\u0131n HTML i\u00e7eri\u011fini al\u0131r veya ayarlar. Bu, sadece metin de\u011fil, ayn\u0131 zamanda HTML etiketlerini de eklemenize olanak tan\u0131r. Ancak, kullan\u0131c\u0131dan gelen verilerle kullan\u0131ld\u0131\u011f\u0131nda XSS (Cross-Site Scripting) g\u00fcvenlik a\u00e7\u0131klar\u0131na yol a\u00e7abilir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <div id=\"myDiv\"><\/div>\n    const myDiv = document.getElementById('myDiv');\n    myDiv.innerHTML = '<h2>Ba\u015fl\u0131k<\/h2><p>Yeni \u0130\u00e7erik<\/p>';\n    \/\/ Sonu\u00e7: <div id=\"myDiv\"><h2>Ba\u015fl\u0131k<\/h2><p>Yeni \u0130\u00e7erik<\/p><\/div>\n\n    \/\/ G\u00fcvenlik Notu:\n    \/\/ myDiv.innerHTML = userInput; \/\/ E\u011fer userInput k\u00f6t\u00fc niyetli script i\u00e7eriyorsa tehlikeli olabilir.<\/code><\/pre>\n<p>    Genel olarak, sadece metin i\u00e7eri\u011fini de\u011fi\u015ftirecekseniz <code>textContent<\/code>&#8216;\u0131 tercih edin. HTML yap\u0131s\u0131n\u0131 de\u011fi\u015ftirmek gerekiyorsa <code>innerHTML<\/code>&#8216;i dikkatli kullan\u0131n veya <code>document.createElement()<\/code> gibi y\u00f6ntemlerle elemanlar\u0131 programatik olarak olu\u015fturup ekleyin.<\/p>\n<h4>Nitelikleri (Attribute) De\u011fi\u015ftirme: <code>setAttribute()<\/code>, <code>getAttribute()<\/code>, <code>removeAttribute()<\/code><\/h4>\n<p>HTML elemanlar\u0131n\u0131n nitelikleri (\u00f6rne\u011fin, <code>src<\/code>, <code>href<\/code>, <code>class<\/code>, <code>id<\/code>) JavaScript ile okunabilir, de\u011fi\u015ftirilebilir veya kald\u0131r\u0131labilir.<\/p>\n<p>*   <strong><code>element.setAttribute(name, value)<\/code>:<\/strong> Bir eleman\u0131n belirtilen niteli\u011fini ayarlar veya g\u00fcnceller.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <img decoding=\"async\" id=\"myImage\" src=\"old.jpg\" alt=\"Eski Resim\">\n    const myImage = document.getElementById('myImage');\n    myImage.setAttribute('src', 'new.jpg');\n    myImage.setAttribute('alt', 'Yeni Resim');\n    myImage.setAttribute('width', '200'); \/\/ Yeni bir nitelik ekler<\/code><\/pre>\n<p>*   <strong><code>element.getAttribute(name)<\/code>:<\/strong> Bir eleman\u0131n belirtilen niteli\u011finin de\u011ferini d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">console.log(myImage.getAttribute('src')); \/\/ \"new.jpg\"<\/code><\/pre>\n<p>*   <strong><code>element.removeAttribute(name)<\/code>:<\/strong> Bir eleman\u0131n belirtilen niteli\u011fini kald\u0131r\u0131r.<\/p>\n<pre><code class=\"language-javascript\">myImage.removeAttribute('width'); \/\/ width niteli\u011fini kald\u0131r\u0131r<\/code><\/pre>\n<p>Baz\u0131 yayg\u0131n nitelikler (id, className, href, src vb.) do\u011frudan eleman\u0131n bir \u00f6zelli\u011fi olarak da eri\u015filebilir ve de\u011fi\u015ftirilebilir:<\/p>\n<pre><code class=\"language-javascript\">myImage.src = 'another.jpg'; \/\/ Daha k\u0131sa ve yayg\u0131n kullan\u0131m\nconsole.log(myImage.id);<\/code><\/pre>\n<h4>Stil De\u011fi\u015fiklikleri: <code>style<\/code> Nesnesi ve <code>classList<\/code> API<\/h4>\n<p>Elemanlar\u0131n g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc de\u011fi\u015ftirmek i\u00e7in CSS stilleri manip\u00fcle edilebilir.<\/p>\n<p>*   <strong>Inline Stiller: <code>element.style<\/code> Nesnesi:<\/strong> Her HTML eleman\u0131n\u0131n bir <code>style<\/code> \u00f6zelli\u011fi vard\u0131r. Bu \u00f6zellik, eleman\u0131n inline CSS stillerini i\u00e7eren bir CSSStyleDeclaration nesnesidir. JavaScript ile bu nesnenin \u00f6zelliklerini ayarlayarak do\u011frudan inline stil uygulayabilirsiniz. CSS \u00f6zellik adlar\u0131 camelCase format\u0131nda yaz\u0131l\u0131r (\u00f6rne\u011fin, <code>background-color<\/code> yerine <code>backgroundColor<\/code>).<\/p>\n<pre><code class=\"language-javascript\">const myDiv = document.getElementById('myDiv');\n    myDiv.style.backgroundColor = 'blue';\n    myDiv.style.color = 'white';\n    myDiv.style.fontSize = '18px';<\/code><\/pre>\n<p>    Bu y\u00f6ntem, tekil stil de\u011fi\u015fiklikleri i\u00e7in uygundur ancak karma\u015f\u0131k stil y\u00f6netimi i\u00e7in \u00f6nerilmez. Inline stiller, CSS \u00f6ncelik s\u0131ralamas\u0131nda y\u00fcksek bir yere sahiptir ve genellikle daha az esneklik sa\u011flar.<\/p>\n<p>*   <strong>CSS S\u0131n\u0131flar\u0131 ile Y\u00f6netim: <code>element.classList<\/code> API:<\/strong> Elemanlar\u0131n stillerini y\u00f6netmenin en iyi yolu, CSS s\u0131n\u0131flar\u0131n\u0131 kullanmakt\u0131r. <code>classList<\/code> API&#8217;si, bir eleman\u0131n s\u0131n\u0131f listesini kolayca y\u00f6netmenizi sa\u011flar.<\/p>\n<p>    *   <strong><code>element.classList.add(className)<\/code>:<\/strong> Bir veya daha fazla s\u0131n\u0131f ekler.<br \/>\n    *   <strong><code>element.classList.remove(className)<\/code>:<\/strong> Bir veya daha fazla s\u0131n\u0131f\u0131 kald\u0131r\u0131r.<br \/>\n    *   <strong><code>element.classList.toggle(className)<\/code>:<\/strong> S\u0131n\u0131f varsa kald\u0131r\u0131r, yoksa ekler.<br \/>\n    *   <strong><code>element.classList.contains(className)<\/code>:<\/strong> Belirtilen s\u0131n\u0131f\u0131n eleman \u00fczerinde olup olmad\u0131\u011f\u0131n\u0131 kontrol eder (<code>true<\/code>\/<code>false<\/code> d\u00f6nd\u00fcr\u00fcr).<\/p>\n<pre><code class=\"language-javascript\">\/\/ CSS: .highlight { background-color: yellow; } .active { color: red; }\n    const myButton = document.getElementById('myButton');\n\n    myButton.classList.add('highlight'); \/\/ highlight s\u0131n\u0131f\u0131n\u0131 ekler\n    console.log(myButton.classList.contains('highlight')); \/\/ true\n\n    myButton.classList.remove('highlight'); \/\/ highlight s\u0131n\u0131f\u0131n\u0131 kald\u0131r\u0131r\n    console.log(myButton.classList.contains('highlight')); \/\/ false\n\n    myButton.classList.toggle('active'); \/\/ active s\u0131n\u0131f\u0131n\u0131 ekler\n    \/\/ Kullan\u0131c\u0131 bir daha t\u0131klad\u0131\u011f\u0131nda:\n    myButton.classList.toggle('active'); \/\/ active s\u0131n\u0131f\u0131n\u0131 kald\u0131r\u0131r<\/code><\/pre>\n<p>    <code>classList<\/code> API&#8217;si, stil de\u011fi\u015fikliklerini daha mod\u00fcler ve y\u00f6netilebilir hale getirir, \u00e7\u00fcnk\u00fc t\u00fcm stil tan\u0131mlamalar\u0131 CSS dosyalar\u0131nda kal\u0131r.<\/p>\n<h3>DOM Elemanlar\u0131n\u0131 Silme ve Kald\u0131rma<\/h3>\n<p>Dinamik web sayfalar\u0131nda, art\u0131k ihtiya\u00e7 duyulmayan elemanlar\u0131 DOM&#8217;dan kald\u0131rmak da \u00f6nemlidir. Bu, sayfa performans\u0131n\u0131 art\u0131rabilir ve gereksiz bellek kullan\u0131m\u0131n\u0131 \u00f6nleyebilir.<\/p>\n<h4>Eleman Silme: <code>parentNode.removeChild(childNode)<\/code><\/h4>\n<p>Bir eleman\u0131 kald\u0131rmak i\u00e7in, onun ebeveynine eri\u015fip <code>removeChild()<\/code> y\u00f6ntemini \u00e7a\u011f\u0131rman\u0131z gerekir. Bu y\u00f6ntem, belirtilen \u00e7ocuk d\u00fc\u011f\u00fcm\u00fcn\u00fc DOM&#8217;dan kald\u0131r\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <div id=\"container\"><p id=\"removable\">Beni kald\u0131r!<\/p><\/div>\nconst container = document.getElementById('container');\nconst removableParagraph = document.getElementById('removable');\n\nif (removableParagraph) {\n    container.removeChild(removableParagraph); \/\/ Paragraf\u0131 container'dan kald\u0131r\u0131r\n}<\/code><\/pre>\n<p>Bu y\u00f6ntem, kald\u0131r\u0131lacak eleman\u0131n ebeveynini bilmeyi gerektirir.<\/p>\n<h4>Kendini Silme: <code>element.remove()<\/code><\/h4>\n<p>Modern taray\u0131c\u0131larda (IE hari\u00e7), bir eleman\u0131 kendi \u00fczerinden <code>remove()<\/code> y\u00f6ntemiyle kald\u0131rmak \u00e7ok daha kolayd\u0131r. Bu y\u00f6ntem, eleman\u0131 do\u011frudan DOM&#8217;dan kald\u0131r\u0131r ve ebeveynini bilme gereksinimini ortadan kald\u0131r\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <div id=\"container\"><p id=\"removable\">Beni kald\u0131r!<\/p><\/div>\nconst removableParagraph = document.getElementById('removable');\n\nif (removableParagraph) {\n    removableParagraph.remove(); \/\/ Paragraf\u0131 do\u011frudan kald\u0131r\u0131r\n}<\/code><\/pre>\n<p><code>remove()<\/code> y\u00f6ntemi, <code>removeChild()<\/code>&#8216;a g\u00f6re daha sezgisel ve kullan\u0131m\u0131 kolayd\u0131r.<\/p>\n<h4>\u00d6rnek Senaryo: Dinamik Eleman Silme<\/h4>\n<p>Bir &#8220;Sil&#8221; d\u00fc\u011fmesi t\u0131kland\u0131\u011f\u0131nda, ilgili liste \u00f6\u011fesini kald\u0131rma:<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML:\n\/\/ <ul id=\"myList\">\n\/\/   <li>\u00d6\u011fe 1 <button class=\"delete-btn\">Sil<\/button><\/li>\n\/\/   <li>\u00d6\u011fe 2 <button class=\"delete-btn\">Sil<\/button><\/li>\n\/\/ <\/ul>\n\nconst deleteButtons = document.querySelectorAll('.delete-btn');\n\ndeleteButtons.forEach(button => {\n    button.addEventListener('click', function() {\n        const listItem = this.parentNode; \/\/ D\u00fc\u011fmenin ebeveyni (<li>)\n        listItem.remove(); \/\/ <li> eleman\u0131n\u0131 kald\u0131r\n    });\n});<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>this.parentNode<\/code> kullanarak d\u00fc\u011fmeye en yak\u0131n <code><\/p>\n<li><\/code> eleman\u0131na eri\u015fip onu <code>remove()<\/code> metoduyla siliyoruz.<br \/>\n<h3>Olay Dinleyicileri (Event Listeners) ile Etkile\u015fim<\/h3>\n<p>Web sayfalar\u0131n\u0131 etkile\u015fimli hale getiren temel mekanizma, kullan\u0131c\u0131 eylemlerine (t\u0131klamalar, klavye giri\u015fleri, fare hareketleri vb.) veya taray\u0131c\u0131 olaylar\u0131na (sayfa y\u00fcklenmesi, eleman boyutland\u0131rma vb.) yan\u0131t vermektir. Bu yan\u0131tlar, olay dinleyicileri (event listeners) arac\u0131l\u0131\u011f\u0131yla sa\u011flan\u0131r.<\/p>\n<h4>Olay Dinleyici Ekleme: <code>addEventListener()<\/code><\/h4>\n<p><code>element.addEventListener(event, handler, options)<\/code> y\u00f6ntemi, belirli bir elemana belirli bir olay t\u00fcr\u00fc (event) ger\u00e7ekle\u015fti\u011finde \u00e7al\u0131\u015facak bir fonksiyonu (handler) atar. Bu, bir elemana birden fazla olay dinleyicisi eklemeye olanak tan\u0131r ve eski <code>onclick<\/code> gibi nitelik tabanl\u0131 y\u00f6ntemlere g\u00f6re daha esnektir.<\/p>\n<p>*   <code>event<\/code>: Dinlenecek olay t\u00fcr\u00fcn\u00fc belirten bir dize (\u00f6rne\u011fin, &#8216;click&#8217;, &#8216;mouseover&#8217;, &#8216;submit&#8217;).<br \/>\n*   <code>handler<\/code>: Olay ger\u00e7ekle\u015fti\u011finde \u00e7a\u011fr\u0131lacak fonksiyon. Bu fonksiyon, olay hakk\u0131nda bilgi i\u00e7eren bir <code>Event<\/code> nesnesi al\u0131r.<br \/>\n*   <code>options<\/code> (iste\u011fe ba\u011fl\u0131): Olay dinleyicisinin davran\u0131\u015f\u0131n\u0131 yap\u0131land\u0131ran bir nesne (\u00f6rne\u011fin, <code>capture<\/code>, <code>once<\/code>, <code>passive<\/code>).<\/p>\n<pre><code class=\"language-javascript\">const myButton = document.getElementById('myButton');\n\nmyButton.addEventListener('click', function(event) {\n    console.log('D\u00fc\u011fmeye t\u0131kland\u0131!');\n    console.log(event.target); \/\/ T\u0131klanan eleman\u0131 d\u00f6nd\u00fcr\u00fcr (bu durumda myButton)\n});\n\n\/\/ Arrow fonksiyon ile:\nmyButton.addEventListener('mouseover', (event) => {\n    console.log('Fare d\u00fc\u011fmenin \u00fczerine geldi.');\n});<\/code><\/pre>\n<h4>Yayg\u0131n Olay T\u00fcrleri: <code>click<\/code>, <code>mouseover<\/code>, <code>keydown<\/code>, <code>submit<\/code>, <code>load<\/code><\/h4>\n<p>JavaScript&#8217;te y\u00fczlerce olay t\u00fcr\u00fc bulunur. En yayg\u0131n olanlardan baz\u0131lar\u0131:<\/p>\n<p>*   <strong><code>click<\/code><\/strong>: Bir elemana t\u0131kland\u0131\u011f\u0131nda.<br \/>\n*   <strong><code>dblclick<\/code><\/strong>: Bir elemana \u00e7ift t\u0131kland\u0131\u011f\u0131nda.<br \/>\n*   <strong><code>mouseover<\/code><\/strong>: Fare imleci bir eleman\u0131n \u00fczerine geldi\u011finde.<br \/>\n*   <strong><code>mouseout<\/code><\/strong>: Fare imleci bir eleman\u0131n \u00fczerinden ayr\u0131ld\u0131\u011f\u0131nda.<br \/>\n*   <strong><code>mousedown<\/code> \/ <code>mouseup<\/code><\/strong>: Fare d\u00fc\u011fmesine bas\u0131ld\u0131\u011f\u0131nda \/ b\u0131rak\u0131ld\u0131\u011f\u0131nda.<br \/>\n*   <strong><code>keydown<\/code> \/ <code>keyup<\/code><\/strong>: Bir tu\u015fa bas\u0131ld\u0131\u011f\u0131nda \/ b\u0131rak\u0131ld\u0131\u011f\u0131nda (klavye olaylar\u0131).<br \/>\n*   <strong><code>input<\/code><\/strong>: Bir form eleman\u0131n\u0131n de\u011feri de\u011fi\u015fti\u011finde (input, textarea, select).<br \/>\n*   <strong><code>change<\/code><\/strong>: Bir form eleman\u0131n\u0131n de\u011feri de\u011fi\u015fip eleman oda\u011f\u0131 kaybetti\u011finde.<br \/>\n*   <strong><code>submit<\/code><\/strong>: Bir form g\u00f6nderildi\u011finde.<br \/>\n*   <strong><code>focus<\/code> \/ <code>blur<\/code><\/strong>: Bir eleman odakland\u0131\u011f\u0131nda \/ oda\u011f\u0131 kaybetti\u011finde.<br \/>\n*   <strong><code>load<\/code><\/strong>: Sayfa veya eleman tamamen y\u00fcklendi\u011finde (\u00f6rne\u011fin, <code>window.onload<\/code> veya <code>img.onload<\/code>).<br \/>\n*   <strong><code>DOMContentLoaded<\/code><\/strong>: HTML belgesi tamamen y\u00fcklendi\u011finde ve ayr\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda (resimler, stil dosyalar\u0131 gibi d\u0131\u015f kaynaklar\u0131n y\u00fcklenmesini beklemez).<\/p>\n<h4>Olay Nesnesi ve \u00d6zellikleri<\/h4>\n<p>Olay dinleyici fonksiyonuna otomatik olarak bir <code>Event<\/code> nesnesi ge\u00e7irilir. Bu nesne, ger\u00e7ekle\u015fen olay hakk\u0131nda detayl\u0131 bilgi i\u00e7erir:<\/p>\n<p>*   <strong><code>event.target<\/code><\/strong>: Olay\u0131n orijinal olarak tetiklendi\u011fi eleman.<br \/>\n*   <strong><code>event.currentTarget<\/code><\/strong>: Olay dinleyicisinin ba\u011fl\u0131 oldu\u011fu eleman.<br \/>\n*   <strong><code>event.type<\/code><\/strong>: Olay\u0131n t\u00fcr\u00fc (\u00f6rne\u011fin, &#8220;click&#8221;).<br \/>\n*   <strong><code>event.clientX<\/code> \/ <code>event.clientY<\/code><\/strong>: Fare olaylar\u0131nda, farenin pencereye g\u00f6re X\/Y koordinatlar\u0131.<br \/>\n*   <strong><code>event.key<\/code> \/ <code>event.code<\/code><\/strong>: Klavye olaylar\u0131nda, bas\u0131lan tu\u015fun de\u011feri veya kodu.<br \/>\n*   <strong><code>event.preventDefault()<\/code><\/strong>: Olay\u0131n varsay\u0131lan eylemini engeller (\u00f6rne\u011fin, bir formun g\u00f6nderilmesini veya bir ba\u011flant\u0131ya t\u0131klaman\u0131n sayfay\u0131 yenilemesini engellemek).<br \/>\n*   <strong><code>event.stopPropagation()<\/code><\/strong>: Olay\u0131n DOM a\u011fac\u0131nda daha fazla yay\u0131lmas\u0131n\u0131 durdurur.<\/p>\n<pre><code class=\"language-javascript\">document.querySelector('a').addEventListener('click', function(event) {\n    event.preventDefault(); \/\/ Ba\u011flant\u0131n\u0131n varsay\u0131lan davran\u0131\u015f\u0131n\u0131 (sayfa yenileme) engeller\n    console.log('Ba\u011flant\u0131ya t\u0131kland\u0131 ama y\u00f6nlendirme yap\u0131lmad\u0131.');\n});<\/code><\/pre>\n<h4>Olay Dinleyiciyi Kald\u0131rma: <code>removeEventListener()<\/code><\/h4>\n<p>Bazen bir olay dinleyicisini kald\u0131rmak gerekebilir (\u00f6rne\u011fin, bir kez \u00e7al\u0131\u015ft\u0131ktan sonra veya belirli ko\u015fullar alt\u0131nda). <code>removeEventListener()<\/code> y\u00f6ntemi, <code>addEventListener()<\/code> ile eklenmi\u015f bir dinleyiciyi kald\u0131r\u0131r. Dinleyicinin kald\u0131r\u0131labilmesi i\u00e7in, <code>addEventListener()<\/code>&#8216;a ge\u00e7irilen fonksiyon referans\u0131n\u0131n ayn\u0131 olmas\u0131 gerekir. Anonim fonksiyonlar kald\u0131r\u0131lamaz.<\/p>\n<pre><code class=\"language-javascript\">function handleClick() {\n    console.log('D\u00fc\u011fmeye t\u0131kland\u0131!');\n}\n\nmyButton.addEventListener('click', handleClick); \/\/ Dinleyici ekle\n\n\/\/ Daha sonra:\nmyButton.removeEventListener('click', handleClick); \/\/ Dinleyiciyi kald\u0131r<\/code><\/pre>\n<h4>Olay Yay\u0131l\u0131m\u0131 (Event Bubbling) ve Yakalama (Event Capturing)<\/h4>\n<p>Bir eleman \u00fczerinde bir olay tetiklendi\u011finde, bu olay DOM a\u011fac\u0131nda yukar\u0131 veya a\u015fa\u011f\u0131 do\u011fru yay\u0131l\u0131r.<\/p>\n<p>*   <strong>Bubbling (Kabarc\u0131klanma):<\/strong> Olay, tetiklendi\u011fi elemandan ba\u015flar ve ebeveynlerine do\u011fru DOM a\u011fac\u0131nda yukar\u0131 do\u011fru yay\u0131l\u0131r. Varsay\u0131lan davran\u0131\u015ft\u0131r.<br \/>\n*   <strong>Capturing (Yakalama):<\/strong> Olay, <code>document<\/code> nesnesinden ba\u015flar ve tetiklenece\u011fi elemana do\u011fru DOM a\u011fac\u0131nda a\u015fa\u011f\u0131 do\u011fru yay\u0131l\u0131r. <code>addEventListener<\/code>&#8216;\u0131n \u00fc\u00e7\u00fcnc\u00fc parametresi olarak <code>{ capture: true }<\/code> ge\u00e7irilerek etkinle\u015ftirilir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ HTML: <div id=\"parent\"><button id=\"child\">T\u0131kla<\/button><\/div>\nconst parent = document.getElementById('parent');\nconst child = document.getElementById('child');\n\nparent.addEventListener('click', () => console.log('Parent yakalad\u0131 (kabarc\u0131klanma)'), false); \/\/ Varsay\u0131lan: bubbling\nchild.addEventListener('click', () => console.log('Child yakalad\u0131'), false);\n\n\/\/ \u00c7\u0131kt\u0131 (child'a t\u0131klan\u0131nca):\n\/\/ Child yakalad\u0131\n\/\/ Parent yakalad\u0131 (kabarc\u0131klanma)\n\n\/\/ Capturing \u00f6rne\u011fi:\nparent.addEventListener('click', () => console.log('Parent yakalad\u0131 (yakalama)'), { capture: true });\n\/\/ \u00c7\u0131kt\u0131 (child'a t\u0131klan\u0131nca):\n\/\/ Parent yakalad\u0131 (yakalama)\n\/\/ Child yakalad\u0131\n\/\/ Parent yakalad\u0131 (kabarc\u0131klanma)<\/code><\/pre>\n<p>Bu mekanizma, &#8220;olay delegasyonu&#8221; gibi g\u00fc\u00e7l\u00fc desenler olu\u015fturmak i\u00e7in kullan\u0131l\u0131r. B\u00fcy\u00fck listelerdeki her bir \u00f6\u011feye tek tek dinleyici eklemek yerine, listeye bir dinleyici ekleyip olay kabarc\u0131klanma yoluyla geldi\u011finde <code>event.target<\/code>&#8216;\u0131 kontrol ederek hangi \u00f6\u011fenin t\u0131kland\u0131\u011f\u0131n\u0131 belirleyebilirsiniz.<\/p>\n<h4><code>event.preventDefault()<\/code> ve <code>event.stopPropagation()<\/code><\/h4>\n<p>*   <strong><code>event.preventDefault()<\/code>:<\/strong> Bir olay\u0131n varsay\u0131lan eylemini iptal eder. \u00d6rne\u011fin, bir <code><a><\/code> etiketine t\u0131kland\u0131\u011f\u0131nda sayfa yenilemesini veya bir formun <code>submit<\/code> edildi\u011finde varsay\u0131lan olarak sunucuya g\u00f6nderilmesini engellemek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>*   <strong><code>event.stopPropagation()<\/code>:<\/strong> Olay\u0131n DOM a\u011fac\u0131nda daha fazla yay\u0131lmas\u0131n\u0131 (hem bubbling hem de capturing a\u015famalar\u0131nda) durdurur. Bu, i\u00e7 i\u00e7e ge\u00e7mi\u015f elemanlarda gereksiz ebeveyn dinleyicilerinin tetiklenmesini \u00f6nlemek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-javascript\">const link = document.getElementById('myLink');\nlink.addEventListener('click', function(event) {\n    event.preventDefault(); \/\/ Sayfa y\u00f6nlendirmesini engeller\n    console.log('Ba\u011flant\u0131ya t\u0131kland\u0131 ama sayfa yenilenmedi.');\n});\n\nconst outerDiv = document.getElementById('outer');\nconst innerDiv = document.getElementById('inner');\n\nouterDiv.addEventListener('click', () => console.log('D\u0131\u015f div t\u0131kland\u0131.'));\ninnerDiv.addEventListener('click', function(event) {\n    event.stopPropagation(); \/\/ Olay\u0131n outerDiv'e yay\u0131lmas\u0131n\u0131 engeller\n    console.log('\u0130\u00e7 div t\u0131kland\u0131.');\n});\n\n\/\/ innerDiv'e t\u0131klan\u0131nca sadece \"\u0130\u00e7 div t\u0131kland\u0131.\" \u00e7\u0131kt\u0131s\u0131 al\u0131n\u0131r.<\/code><\/pre>\n<h3>Performans ve En \u0130yi Uygulamalar<\/h3>\n<p>DOM manip\u00fclasyonu, web sayfalar\u0131n\u0131 dinamik hale getirmenin temelidir, ancak yanl\u0131\u015f kullan\u0131ld\u0131\u011f\u0131nda performans sorunlar\u0131na yol a\u00e7abilir. Taray\u0131c\u0131lar, DOM&#8217;da yap\u0131lan her de\u011fi\u015fikli\u011fi yans\u0131tmak i\u00e7in &#8220;reflow&#8221; (d\u00fczenin yeniden hesaplanmas\u0131) ve &#8220;repaint&#8221; (elemanlar\u0131n yeniden \u00e7izilmesi) gibi maliyetli i\u015flemler yapar. Bu i\u015flemlerin say\u0131s\u0131n\u0131 minimize etmek, daha ak\u0131c\u0131 ve h\u0131zl\u0131 bir kullan\u0131c\u0131 deneyimi sa\u011flar.<\/p>\n<h4>DOM Manip\u00fclasyonunu Minimize Etme<\/h4>\n<p>*   <strong>Toplu De\u011fi\u015fiklikler Yap\u0131n:<\/strong> M\u00fcmk\u00fcn oldu\u011funca, birden fazla DOM de\u011fi\u015fikli\u011fini tek bir i\u015flemde birle\u015ftirin. \u00d6rne\u011fin, bir d\u00f6ng\u00fc i\u00e7inde her ad\u0131mda DOM&#8217;a eleman eklemek yerine, t\u00fcm elemanlar\u0131 haf\u0131zada olu\u015fturun ve ard\u0131ndan tek bir <code>appendChild()<\/code> veya <code>append()<\/code> i\u015flemiyle DOM&#8217;a ekleyin.<br \/>\n*   <strong>Eleman\u0131 DOM&#8217;dan Ay\u0131r\u0131n:<\/strong> B\u00fcy\u00fck de\u011fi\u015fiklikler yaparken, eleman\u0131 ge\u00e7ici olarak DOM&#8217;dan kald\u0131r\u0131n, de\u011fi\u015fiklikleri yap\u0131n ve sonra tekrar DOM&#8217;a ekleyin. Bu, birden fazla reflow\/repaint yerine tek bir reflow\/repaint tetikler.<\/p>\n<pre><code class=\"language-javascript\">const list = document.getElementById('myList');\n    const parent = list.parentNode;\n    parent.removeChild(list); \/\/ Listeyi DOM'dan kald\u0131r\n\n    \/\/ Burada list \u00fczerinde birden fazla de\u011fi\u015fiklik yap\n    for (let i = 0; i < 100; i++) {\n        const li = document.createElement('li');\n        li.textContent = <code>\u00d6\u011fe ${i}<\/code>;\n        list.appendChild(li);\n    }\n\n    parent.appendChild(list); \/\/ Listeyi tekrar DOM'a ekle<\/code><\/pre>\n<h4>Document Fragments Kullan\u0131m\u0131<\/h4>\n<p><code>DocumentFragment<\/code> nesnesi, DOM a\u011fac\u0131n\u0131n hafif bir versiyonudur. Ger\u00e7ek DOM&#8217;a eklenmeden \u00f6nce elemanlar\u0131 grupland\u0131rmak ve \u00fczerinde i\u015flem yapmak i\u00e7in kullan\u0131labilir. Bir <code>DocumentFragment<\/code>&#8216;\u0131 DOM&#8217;a ekledi\u011finizde, fragment&#8217;\u0131n kendisi de\u011fil, yaln\u0131zca \u00e7ocuklar\u0131 eklenir. Bu, \u00e7ok say\u0131da eleman eklerken performans avantaj\u0131 sa\u011flar \u00e7\u00fcnk\u00fc sadece bir kez reflow\/repaint tetiklenir.<\/p>\n<pre><code class=\"language-javascript\">const list = document.getElementById('myList');\nconst fragment = document.createDocumentFragment(); \/\/ Fragment olu\u015ftur\n\nfor (let i = 0; i < 1000; i++) {\n    const li = document.createElement('li');\n    li.textContent = <code>\u00d6\u011fe ${i}<\/code>;\n    fragment.appendChild(li); \/\/ Elemanlar\u0131 fragmente ekle\n}\n\nlist.appendChild(fragment); \/\/ Fragment'\u0131 tek seferde listeye ekle<\/code><\/pre>\n<p>Bu y\u00f6ntem, \u00f6zellikle b\u00fcy\u00fck listeler veya tablolar olu\u015ftururken \u00f6nemli performans kazan\u00e7lar\u0131 sa\u011flar.<\/p>\n<h4>Reflow ve Repaint Kavramlar\u0131<\/h4>\n<p>*   <strong>Reflow (D\u00fczen Yeniden Hesaplama):<\/strong> Bir eleman\u0131n geometrik \u00f6zelliklerini (boyut, konum) etkileyen bir de\u011fi\u015fiklik yap\u0131ld\u0131\u011f\u0131nda tetiklenir. \u00d6rne\u011fin, <code>width<\/code>, <code>height<\/code>, <code>padding<\/code>, <code>margin<\/code>, <code>display<\/code>, <code>position<\/code> gibi CSS \u00f6zelliklerinin de\u011fi\u015ftirilmesi reflow&#8217;a neden olur. Reflow, t\u00fcm etkilenen elemanlar\u0131n ve bazen t\u00fcm belgenin yeniden d\u00fczenlenmesini gerektirdi\u011finden olduk\u00e7a maliyetlidir.<br \/>\n*   <strong>Repaint (Yeniden \u00c7izim):<\/strong> Bir eleman\u0131n g\u00f6rsel \u00f6zelliklerini (renk, arka plan, g\u00f6r\u00fcn\u00fcrl\u00fck) etkileyen ancak geometrisini de\u011fi\u015ftirmeyen bir de\u011fi\u015fiklik yap\u0131ld\u0131\u011f\u0131nda tetiklenir. \u00d6rne\u011fin, <code>color<\/code>, <code>background-color<\/code>, <code>visibility<\/code> gibi \u00f6zelliklerin de\u011fi\u015ftirilmesi repaint&#8217;e neden olur. Repaint, reflow&#8217;dan daha az maliyetlidir ancak yine de performans\u0131 etkileyebilir.<br \/>\nTaray\u0131c\u0131lar, reflow ve repaint i\u015flemlerini optimize etmek i\u00e7in genellikle de\u011fi\u015fiklikleri toplu olarak uygularlar, ancak JavaScript&#8217;ten elemanlar\u0131n boyut veya konum bilgilerini okumak (\u00f6rne\u011fin, <code>offsetHeight<\/code>, <code>offsetWidth<\/code>, <code>getComputedStyle()<\/code>) bu optimizasyonu bozar ve taray\u0131c\u0131y\u0131 bekleyen t\u00fcm d\u00fczen de\u011fi\u015fikliklerini hemen uygulamaya zorlar. Bu nedenle, bu t\u00fcr okuma i\u015flemlerini minimize etmek \u00f6nemlidir.<\/p>\n<h4>Asenkron \u0130\u015flemler ve Debouncing\/Throttling (K\u0131saca)<\/h4>\n<p>Yo\u011fun olay dinleyicileri (\u00f6rne\u011fin, <code>mousemove<\/code>, <code>scroll<\/code>, <code>resize<\/code>, <code>input<\/code>) \u00e7ok s\u0131k tetiklenebilir ve bu da DOM manip\u00fclasyonu yap\u0131l\u0131yorsa performans sorunlar\u0131na yol a\u00e7abilir.<\/p>\n<p>*   <strong>Debouncing:<\/strong> Bir fonksiyonun, belirli bir s\u00fcre i\u00e7inde tekrar tetiklenmedi\u011fi s\u00fcrece \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. \u00d6rne\u011fin, bir arama kutusuna yazarken her tu\u015f vuru\u015funda arama yapmak yerine, kullan\u0131c\u0131 yazmay\u0131 bitirdikten k\u0131sa bir s\u00fcre sonra arama yapmak i\u00e7in debouncing kullan\u0131labilir.<br \/>\n*   <strong>Throttling:<\/strong> Bir fonksiyonun, belirli bir zaman aral\u0131\u011f\u0131nda en fazla bir kez \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. \u00d6rne\u011fin, bir kayd\u0131rma olay\u0131n\u0131n her milisaniyede bir tetiklenmesini engellemek ve sadece her 100 milisaniyede bir tetiklenmesini sa\u011flamak i\u00e7in throttling kullan\u0131labilir.<br \/>\nBu teknikler, yo\u011fun DOM olaylar\u0131n\u0131 y\u00f6neterek performans\u0131 art\u0131r\u0131r.<\/p>\n<h4>Modern \u00c7er\u00e7evelerin (Frameworks) Rol\u00fc (K\u0131saca)<\/h4>\n<p>React, Vue, Angular gibi modern JavaScript \u00e7er\u00e7eveleri ve k\u00fct\u00fcphaneleri, DOM manip\u00fclasyonunu soyutlayarak geli\u015ftiricilerin do\u011frudan DOM ile u\u011fra\u015fma y\u00fck\u00fcn\u00fc azalt\u0131r. Bu \u00e7er\u00e7eveler, genellikle bir &#8220;sanal DOM&#8221; (Virtual DOM) kullanarak veya optimize edilmi\u015f diffing algoritmalar\u0131yla ger\u00e7ek DOM&#8217;daki de\u011fi\u015fiklikleri en verimli \u015fekilde yaparlar. Bu sayede, geli\u015ftiriciler uygulaman\u0131n durumunu y\u00f6netmeye odaklanabilirken, performans optimizasyonlar\u0131 \u00e7er\u00e7eve taraf\u0131ndan halledilir. Ancak, bu \u00e7er\u00e7evelerin alt\u0131nda yatan prensipleri anlamak i\u00e7in temel DOM manip\u00fclasyon bilgisi yine de kritik \u00f6neme sahiptir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>DOM \u00fczerinde de\u011fi\u015fiklik yapmak, modern ve etkile\u015fimli web uygulamalar\u0131 geli\u015ftirmenin temelidir. JavaScript&#8217;in sundu\u011fu zengin DOM API&#8217;leri sayesinde, web sayfalar\u0131n\u0131n i\u00e7eri\u011fini, yap\u0131s\u0131n\u0131 ve stilini dinamik olarak de\u011fi\u015ftirebilir, kullan\u0131c\u0131 etkile\u015fimlerine yan\u0131t verebilir ve zengin kullan\u0131c\u0131 deneyimleri olu\u015fturabiliriz.<\/p>\n<p>Bu makalede, DOM elemanlar\u0131na \u00e7e\u015fitli y\u00f6ntemlerle nas\u0131l eri\u015filece\u011fini (<code>getElementById<\/code>, <code>querySelector<\/code>, <code>getElementsByClassName<\/code> vb.), yeni elemanlar\u0131n nas\u0131l olu\u015fturulup (createElement, createTextNode) ve DOM&#8217;a nas\u0131l eklenece\u011fini (<code>appendChild<\/code>, <code>insertBefore<\/code>, <code>append<\/code>), mevcut elemanlar\u0131n metin i\u00e7eri\u011finin (<code>textContent<\/code>, <code>innerHTML<\/code>), niteliklerinin (<code>setAttribute<\/code>) ve stillerinin (<code>style<\/code>, <code>classList<\/code>) nas\u0131l g\u00fcncellenece\u011fini, ayr\u0131ca elemanlar\u0131n nas\u0131l silinece\u011fini (<code>removeChild<\/code>, <code>remove<\/code>) detayl\u0131 olarak inceledik.<\/p>\n<p>Ek olarak, kullan\u0131c\u0131 etkile\u015fimlerini y\u00f6netmek i\u00e7in olay dinleyicilerinin (<code>addEventListener<\/code>) nas\u0131l kullan\u0131laca\u011f\u0131n\u0131, yayg\u0131n olay t\u00fcrlerini ve olay nesnesinin \u00f6nemli \u00f6zelliklerini ele ald\u0131k. Olay yay\u0131l\u0131m\u0131, <code>preventDefault()<\/code> ve <code>stopPropagation()<\/code> gibi kavramlar, daha karma\u015f\u0131k etkile\u015fimlerin y\u00f6netilmesinde kritik rol oynar.<\/p>\n<p>Son olarak, DOM manip\u00fclasyonunun performans \u00fczerindeki etkilerini g\u00f6z \u00f6n\u00fcnde bulundurarak, de\u011fi\u015fiklikleri minimize etme, <code>DocumentFragment<\/code> kullan\u0131m\u0131 ve reflow\/repaint gibi kavramlara de\u011findik. Do\u011fru teknikleri ve en iyi uygulamalar\u0131 benimsemek, hem geli\u015ftirme s\u00fcrecini kolayla\u015ft\u0131racak hem de son kullan\u0131c\u0131ya daha ak\u0131c\u0131 ve performansl\u0131 bir deneyim sunacakt\u0131r. DOM&#8217;u ustaca kullanmak, bir web geli\u015ftiricisinin temel becerilerinden biridir ve bu yetkinlik, dinamik ve modern web d\u00fcnyas\u0131nda ba\u015far\u0131l\u0131 uygulamalar yaratman\u0131n anahtar\u0131d\u0131r.<\/p>\n","protected":false},"excerpt":{"rendered":"DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma\nGiri\u015f: DOM Nedir ve Neden \u00d6nemlidir?\nWeb sayfalar\u0131","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[129],"tags":[],"class_list":{"0":"post-36545","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-javascript","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma\" \/>\n<meta property=\"og:description\" content=\"DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma Giri\u015f: DOM Nedir ve Neden \u00d6nemlidir? Web sayfalar\u0131\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-19T14:41:27+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"23 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma\",\"datePublished\":\"2025-12-19T14:41:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/\"},\"wordCount\":3482,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Javascript\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/\",\"name\":\"DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-19T14:41:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/","og_locale":"tr_TR","og_type":"article","og_title":"DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma","og_description":"DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma Giri\u015f: DOM Nedir ve Neden \u00d6nemlidir? Web sayfalar\u0131","og_url":"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-19T14:41:27+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"23 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma","datePublished":"2025-12-19T14:41:27+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/"},"wordCount":3482,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Javascript"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/","url":"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/","name":"DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-19T14:41:27+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/dom-uzerinde-degisiklik-yapma-rehberi-javascript-ile-etkilesimli-web-sayfalari-olusturma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"DOM \u00dczerinde De\u011fi\u015fiklik Yapma Rehberi: JavaScript ile Etkile\u015fimli Web Sayfalar\u0131 Olu\u015fturma"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36545","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=36545"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36545\/revisions"}],"predecessor-version":[{"id":36546,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36545\/revisions\/36546"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36545"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36545"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}