Bu ders için video bulunmamaktadır.
Ders İçeriği
Giriş: DOM Nedir?
Web sayfalarıyla etkileşim kurmak, JavaScript'in en güçlü kullanım alanlarından biridir. Kullanıcı bir butona tıkladığında bir mesaj göstermek, bir formu gönderildiğinde verileri doğrulamak veya bir sayfadaki içeriği dinamik olarak güncellemek gibi işlemler JavaScript ile yapılır. Bu etkileşimi mümkün kılan temel yapı ise DOM'dur.
DOM (Document Object Model - Belge Nesne Modeli), bir HTML veya XML belgesinin programlama arayüzüdür. Tarayıcı bir web sayfasını yüklediğinde, sayfanın HTML yapısını bellekte bir ağaç yapısı (tree structure) olarak temsil eder. Bu ağaçtaki her bir düğüm (node), HTML belgesindeki bir öğeyi (element), metni (text) veya niteliği (attribute) temsil eder. DOM, bu ağaç yapısını ve düğümlerini JavaScript gibi diller aracılığıyla erişilebilir ve değiştirilebilir hale getirir.
Kısacası, DOM sayesinde JavaScript kullanarak:
- Sayfadaki HTML elemanlarını seçebiliriz.
- Elemanların içeriğini (metin, HTML) değiştirebiliriz.
- Elemanların niteliklerini (attributes - örn.
src
,href
,id
,class
) değiştirebiliriz. - Elemanların CSS stillerini değiştirebiliriz.
- Sayfaya yeni elemanlar ekleyebilir veya mevcutları silebiliriz.
- Sayfadaki olaylara (events - örn. tıklama, fare hareketi, klavye girişi) tepki verebiliriz.
Bu derste, DOM'un temellerini, HTML elemanlarını nasıl seçeceğimizi ve seçilen elemanların içeriğini, niteliklerini ve stillerini nasıl değiştireceğimizi (manipüle edeceğimizi) öğreneceğiz.
DOM Ağacı ve Düğümler (Nodes)
Tarayıcı, bir HTML belgesini okuduğunda, onu bir ağaç yapısına dönüştürür. Bu ağacın en tepesinde document
nesnesi bulunur. document
nesnesi, tüm HTML sayfasını temsil eder ve DOM'a erişim için başlangıç noktasıdır.
Ağaçtaki her şey bir düğümdür (node). Başlıca düğüm türleri şunlardır:
- Element Düğümü (Element Node): HTML etiketlerini temsil eder (örn.
<p>
,<div>
,<img>
). - Metin Düğümü (Text Node): HTML elemanlarının içindeki metinleri temsil eder.
- Nitelik Düğümü (Attribute Node): HTML elemanlarının niteliklerini temsil eder (örn.
id="baslik"
,class="vurgu"
). (Genellikle doğrudan manipüle edilmezler, element düğümü üzerinden erişilir). - Yorum Düğümü (Comment Node): HTML yorumlarını (
<!-- ... -->
) temsil eder. - Document Düğümü: Tüm belgeyi temsil eden kök düğümdür.
JavaScript ile bu düğümler arasında gezinebilir, yeni düğümler oluşturabilir, mevcutları değiştirebilir veya silebiliriz.
Yukarıdaki basit HTML sayfasının DOM ağacı kabaca şu şekilde düşünülebilir:
document
html
head
title
- Metin Düğümü: "Örnek Sayfa"
body
h1
(Nitelik: id="baslik")- Metin Düğümü: "Merhaba DOM!"
p
(Nitelik: class="icerik")- Metin Düğümü: "Bu bir paragraftır."
- Yorum Düğümü: " Bu bir yorumdur "
HTML Elemanlarını Seçme (Selecting Elements)
DOM manipülasyonunun ilk adımı, üzerinde işlem yapmak istediğimiz HTML elemanını veya elemanlarını seçmektir. JavaScript, bunun için document
nesnesi üzerinde çeşitli metodlar sunar.
1. ID ile Seçme: getElementById()
Bir HTML elemanını benzersiz id
niteliği ile seçmenin en hızlı ve yaygın yoludur. Belirtilen ID'ye sahip elemanı döndürür. Eğer o ID'ye sahip bir eleman yoksa null
döndürür.
2. Etiket Adı ile Seçme: getElementsByTagName()
Belirtilen etiket adına (tag name) sahip tüm elemanları seçer. Geriye canlı (live) bir HTMLCollection
döndürür. Bu koleksiyon dizi benzeri bir yapıdır ancak tam bir dizi değildir (bazı dizi metodları doğrudan kullanılamaz).
3. Sınıf Adı ile Seçme: getElementsByClassName()
Belirtilen sınıf adına (class name) sahip tüm elemanları seçer. Geriye canlı (live) bir HTMLCollection
döndürür.
4. CSS Seçicileri ile Seçme: querySelector()
ve querySelectorAll()
Modern JavaScript'te eleman seçmek için en güçlü ve esnek yöntemlerdir. CSS seçicilerini (selectors) kullanarak elemanları seçmenizi sağlar.
querySelector(cssSeçici)
: Belirtilen CSS seçicisine uyan ilk elemanı döndürür. Eşleşen eleman yoksanull
döndürür.querySelectorAll(cssSeçici)
: Belirtilen CSS seçicisine uyan tüm elemanları statik (non-live) birNodeList
olarak döndürür. Eşleşen eleman yoksa boş birNodeList
döndürür.NodeList
,HTMLCollection
'a benzer ancak bazı farklılıkları vardır ve genellikleforEach
gibi dizi metodlarını doğrudan destekler.
İpucu: querySelector
ve querySelectorAll
, ID, sınıf, etiket adı, nitelik ve bunların kombinasyonları gibi çok çeşitli CSS seçicilerini desteklediği için genellikle en esnek ve tercih edilen seçme yöntemleridir.
Eleman İçeriğini Değiştirme
Bir HTML elemanını seçtikten sonra, içeriğini çeşitli özellikler kullanarak okuyabilir ve değiştirebiliriz.
textContent
Bir elemanın ve onun alt elemanlarının sadece metin içeriğini temsil eder. HTML etiketlerini yok sayar. Hem okunabilir hem de yazılabilirdir.
innerHTML
Bir elemanın içindeki HTML kodunu temsil eder. Hem metni hem de HTML etiketlerini içerir. Hem okunabilir hem de yazılabilirdir.
Güvenlik Uyarısı: Kullanıcıdan alınan veya güvenilmeyen kaynaklardan gelen verileri doğrudan innerHTML
ile ayarlamak güvenlik riskleri (Cross-Site Scripting - XSS) oluşturabilir. Çünkü bu, sayfaya rastgele HTML ve JavaScript kodu eklenmesine izin verebilir. Mümkünse, sadece metin içeriğini değiştirmek için textContent
kullanın veya içeriği güvenli hale getirme (sanitizing) yöntemleri uygulayın.