Bu ders için video bulunmamaktadır.

Bu derse başlamak veya ilerlemenizi kaydetmek için lütfen giriş yapın veya kayıt olun.

Ders İçeriği

Giriş

Önceki derste DOM'un temellerini ve HTML elemanlarını nasıl seçeceğimizi öğrendik. Artık seçtiğimiz elemanların sadece metin içeriklerini değil, aynı zamanda görünüşlerini ve davranışlarını belirleyen niteliklerini (attributes) ve CSS stillerini de JavaScript ile nasıl değiştirebileceğimizi keşfedeceğiz.

Bir web sayfasının dinamik ve etkileşimli olmasını sağlayan önemli unsurlardan biri, elemanların niteliklerini (örneğin bir resmin src'sini değiştirmek, bir bağlantının href'ini güncellemek) ve stillerini (örneğin bir elemanın rengini, boyutunu veya konumunu değiştirmek) anlık olarak güncelleyebilmektir. JavaScript, DOM aracılığıyla bu işlemleri kolayca yapmamızı sağlar.

Bu derste, HTML elemanlarının niteliklerini okuma, ayarlama, kontrol etme ve kaldırma yöntemlerini öğreneceğiz. Ayrıca, elemanların CSS sınıflarını yönetmek için kullanılan classList özelliğini ve doğrudan inline stilleri değiştirmek için style özelliğini nasıl kullanacağımızı göreceğiz.

HTML Niteliklerini (Attributes) Yönetme

HTML elemanlarının davranışlarını ve özelliklerini belirleyen nitelikler (örneğin idclasssrchrefaltdisabledvalue vb.) JavaScript ile yönetilebilir.

Nitelik Değerini Alma: getAttribute(nitelikAdi)

Bir elemanın belirtilen niteliğinin değerini string olarak döndürür. Eğer nitelik mevcut değilse null döndürür.

getAttribute.js
// HTML: Örnek Site
// HTML: 

let linkElement = document.getElementById("link");
let resimElement = document.getElementById("resim");

let hrefDegeri = linkElement.getAttribute("href");
console.log("Link href:", hrefDegeri); // "https://www.example.com"

let targetDegeri = linkElement.getAttribute("target");
console.log("Link target:", targetDegeri); // "_blank"

let srcDegeri = resimElement.getAttribute("src");
console.log("Resim src:", srcDegeri); // "logo.png"

let olmayanNitelik = linkElement.getAttribute("data-id");
console.log("Olmayan Nitelik:", olmayanNitelik); // null

Nitelik Değerini Ayarlama: setAttribute(nitelikAdi, deger)

Bir elemanın belirtilen niteliğine yeni bir değer atar. Eğer nitelik zaten varsa, değeri güncellenir; yoksa, yeni bir nitelik olarak eklenir.

setAttribute.js
// HTML: 

let profilResmi = document.getElementById("profil-resmi");

// src niteliğini değiştirme
profilResmi.setAttribute("src", "yeni_profil.png");
console.log(profilResmi.getAttribute("src")); // "yeni_profil.png"

// alt niteliğini değiştirme
profilResmi.setAttribute("alt", "Kullanıcı Profil Resmi");

// Yeni bir nitelik ekleme (width)
profilResmi.setAttribute("width", "150");

// HTML şimdi: 

Nitelik Varlığını Kontrol Etme: hasAttribute(nitelikAdi)

Bir elemanın belirtilen niteliğe sahip olup olmadığını kontrol eder. true veya false döndürür.

hasAttribute.js
// HTML: 

let inputElement = document.getElementById("kullanici-adi");

console.log("disabled niteliği var mı?", inputElement.hasAttribute("disabled")); // true
console.log("value niteliği var mı?", inputElement.hasAttribute("value")); // false
console.log("placeholder niteliği var mı?", inputElement.hasAttribute("placeholder")); // false

Nitelik Kaldırma: removeAttribute(nitelikAdi)

Bir elemandan belirtilen niteliği kaldırır.

removeAttribute.js
// HTML: Gönder

let buton = document.getElementById("gonder-btn");

console.log("Buton etkin mi?", !buton.hasAttribute("disabled")); // false

// disabled niteliğini kaldırma
buton.removeAttribute("disabled");

console.log("disabled niteliği kaldırıldı mı?", !buton.hasAttribute("disabled")); // true
console.log("Buton etkin mi?", !buton.hasAttribute("disabled")); // true

// HTML şimdi: Gönder

Doğrudan Özellik Erişimi (Property Access)

Bazı yaygın HTML nitelikleri (idclassNamesrchrefvaluedisabled vb.) doğrudan DOM nesnesinin özellikleri (properties) olarak da erişilebilir ve değiştirilebilir. Bu genellikle getAttribute/setAttribute kullanmaktan daha kısadır.

property_access.js
// HTML: 

let input = document.getElementById("isim-input");

// Değeri okuma
console.log(input.value); // "Başlangıç Değeri"
console.log(input.id); // "isim-input"
console.log(input.type); // "text"

// Değeri değiştirme
input.value = "Yeni Değer";
console.log(input.getAttribute("value")); // Dikkat! getAttribute başlangıçtaki HTML değerini verebilir.
console.log(input.value); // "Yeni Değer" (Güncel değer)

input.disabled = true; // disabled özelliğini true yapma
console.log(input.hasAttribute("disabled")); // true

Not: Nitelik (attribute) ve özellik (property) arasında ince bir fark vardır. Nitelikler HTML kodunda tanımlanır, özellikler ise DOM nesnesine aittir. Çoğu durumda birbirleriyle senkronize çalışırlar, ancak value gibi bazı durumlarda farklılık gösterebilirler. Genellikle güncel durumu almak için özellik erişimi (element.value) tercih edilir.

CSS Sınıflarını Yönetme: classList

Bir elemanın görünümünü değiştirmenin en yaygın yolu ona CSS sınıfları eklemek veya çıkarmaktır. JavaScript, element.classList özelliği aracılığıyla bunu kolayca yapmamızı sağlar. classList, elemanın sınıf listesini temsil eden bir DOMTokenList nesnesidir ve kullanışlı metodlar sunar:

  • add("sinifAdi1", "sinifAdi2", ...): Bir veya daha fazla sınıf adı ekler.
  • remove("sinifAdi1", "sinifAdi2", ...): Bir veya daha fazla sınıf adı kaldırır.
  • toggle("sinifAdi", zorunlu?): Eğer sınıf varsa kaldırır, yoksa ekler. İkinci argüman true ise sınıfı ekler, false ise kaldırır.
  • contains("sinifAdi"): Elemanın belirtilen sınıfa sahip olup olmadığını kontrol eder (true/false).
  • replace("eskiSinif", "yeniSinif"): Mevcut bir sınıfı yenisiyle değiştirir.
classList.js
// HTML: Bu bir uyarı mesajıdır.

let uyariParagrafi = document.getElementById("uyari");

// Sınıf ekleme
uyariParagrafi.classList.add("kirmizi", "kalin");
console.log(uyariParagrafi.className); // "mesaj kirmizi kalin"

// Sınıf kaldırma
uyariParagrafi.classList.remove("mesaj");
console.log(uyariParagrafi.className); // "kirmizi kalin"

// Sınıf varlığını kontrol etme
console.log("kirmizi sınıfı var mı?", uyariParagrafi.classList.contains("kirmizi")); // true
console.log("mavi sınıfı var mı?", uyariParagrafi.classList.contains("mavi")); // false

// Sınıfı değiştirme (toggle)
uyariParagrafi.classList.toggle("kalin"); // "kalin" sınıfı vardı, kaldırıldı.
console.log(uyariParagrafi.className); // "kirmizi"
uyariParagrafi.classList.toggle("kalin"); // "kalin" sınıfı yoktu, eklendi.
console.log(uyariParagrafi.className); // "kirmizi kalin"

// Sınıfı değiştirme (replace)
uyariParagrafi.classList.replace("kirmizi", "yesil");
console.log(uyariParagrafi.className); // "yesil kalin"

İpucu: classList kullanmak, element.className özelliğini doğrudan string olarak değiştirmekten daha güvenli ve kullanışlıdır, çünkü mevcut diğer sınıfları yanlışlıkla silme riskini ortadan kaldırır.

Inline Stilleri Yönetme: style Özelliği

Bir elemanın CSS stillerini doğrudan JavaScript ile değiştirmek için element.style özelliği kullanılır. Bu özellik, elemanın inline (style="...") stillerini temsil eden bir CSSStyleDeclaration nesnesidir.

CSS özellik adları JavaScript'te camelCase formatında yazılır (örneğin, background-color yerine backgroundColorfont-size yerine fontSize).

style_property.js
// HTML: 

let kutuElementi = document.getElementById("kutu");

// Arka plan rengini değiştirme
kutuElementi.style.backgroundColor = "lightblue";

// Genişliği artırma
kutuElementi.style.width = "150px";

// Yazı tipi boyutunu ayarlama
kutuElementi.style.fontSize = "20px";

// Kenarlık stilini değiştirme
kutuElementi.style.border = "2px dashed red";

// Bir stili kaldırmak için boş string atama
kutuElementi.style.height = ""; // height stilini kaldırır

// Stilleri okuma (sadece inline stilleri okur!)
console.log(kutuElementi.style.backgroundColor); // "lightblue"
console.log(kutuElementi.style.width); // "150px"
console.log(kutuElementi.style.padding); // "" (Eğer inline olarak ayarlanmadıysa boş döner)

Uyarı: element.style özelliği sadece elemana doğrudan atanmış inline stilleri okuyabilir ve değiştirebilir. Harici CSS dosyalarından veya <style> etiketlerinden gelen stilleri okumaz. Ayrıca, çok fazla inline stil kullanmak CSS'in yönetimini zorlaştırabilir. Genellikle, stilleri değiştirmek için CSS sınıflarını (classList ile) yönetmek daha iyi bir yaklaşımdır.

Hesaplanmış Stilleri Alma: getComputedStyle()

Bir elemana uygulanan tüm CSS kurallarının (inline, internal, external) sonucunda ortaya çıkan nihai stil değerini almak için window.getComputedStyle(element) metodu kullanılır. Bu metod, sadece okunabilir bir CSSStyleDeclaration nesnesi döndürür.

getComputedStyle.js
/* CSS: 
#bilgi-kutusu {
    padding: 15px;
    font-size: 16px;
    color: rgb(51, 51, 51);
}
*/
// HTML: Bilgi

let bilgiKutusu = document.getElementById("bilgi-kutusu");

let stiller = window.getComputedStyle(bilgiKutusu);

// Hesaplanan stilleri okuma
console.log("Hesaplanan Padding:", stiller.padding); // "15px" (CSS'den geldi)
console.log("Hesaplanan Font Size:", stiller.fontSize); // "16px" (CSS'den geldi)
console.log("Hesaplanan Background Color:", stiller.backgroundColor); // "rgb(255, 255, 0)" (inline stilden geldi)
console.log("Hesaplanan Color:", stiller.color); // "rgb(51, 51, 51)" (CSS'den geldi)
console.log("Hesaplanan Display:", stiller.display); // "block" (Tarayıcı varsayılanı)

// stiller.color = "red"; // Hata! getComputedStyle sadece okunabilirdir.

Alıştırmalar

  1. Sayfadaki tüm bağlantıların (<a> etiketleri) target niteliğini _blank olarak ayarlayın.
  2. Bir butona tıklandığında, sayfadaki bir resmin src niteliğini farklı bir resim URL'si ile değiştirin.
  3. Bir metin kutusuna (<input type="text">) odaklanıldığında (focus olayı) arka plan rengini değiştiren, odaktan çıkıldığında (blur olayı) eski rengine döndüren bir kod yazın (style özelliğini kullanın).
  4. Bir div elemanına tıklandığında, active sınıfını ekleyip kaldıran (toggle) bir kod yazın (classList kullanın).
  5. Sayfadaki bir paragrafın (<p>) hesaplanmış yazı tipi boyutunu (font-size) konsola yazdırın (getComputedStyle kullanın).

Bu derste, JavaScript kullanarak HTML elemanlarının niteliklerini ve stillerini nasıl manipüle edeceğimizi öğrendik:

  • Nitelik Yönetimi:
    • getAttribute(): Nitelik değerini alır.
    • setAttribute(): Nitelik değerini ayarlar veya ekler.
    • hasAttribute(): Nitelik varlığını kontrol eder.
    • removeAttribute(): Niteliği kaldırır.
    • Doğrudan özellik erişimi (element.idelement.src vb.) de kullanılabilir.
  • CSS Sınıfları Yönetimi (classList):
    • add(): Sınıf ekler.
    • remove(): Sınıf kaldırır.
    • toggle(): Sınıfı ekler/kaldırır.
    • contains(): Sınıf varlığını kontrol eder.
    • replace(): Sınıfı değiştirir.
  • Inline Stil Yönetimi (style): Elemanın inline stillerini doğrudan değiştirir (CSS özellik adları camelCase kullanılır: element.style.backgroundColor).
  • Hesaplanmış Stil Alma (getComputedStyle()): Bir elemana uygulanan nihai CSS stil değerlerini okur.

Nitelikleri ve stilleri JavaScript ile dinamik olarak değiştirebilmek, web sayfalarına etkileşim katmanın ve kullanıcı deneyimini zenginleştirmenin anahtarıdır.

Bir sonraki derste, DOM ağacına yeni elemanlar eklemeyi, mevcutları silmeyi ve elemanlar arasında gezinmeyi öğreneceğiz.