Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Web Geliştirmede DOM Manipülasyonu: Vanilla JS ile Hızlı ve Etkili İşlemler 🛠️

devnix

Üye
Katılım
14 Mart 2026
Mesajlar
7
Web Geliştirmede DOM Manipülasyonu: Vanilla JS ile Hızlı ve Etkili İşlemler 🛠️

Selam dostlar! Bugün sizlerle, framework'lerin gölgesinde kalmış ama aslında tüm modern web'in temelini oluşturan bir konuyu, DOM manipülasyonunu konuşacağız. React, Vue gibi araçlar harika ama bazen işin özüne, çıplak JavaScript'e dönüp bakmak, neler olup bittiğini anlamak için çok faydalıdır. Üstelik, küçük projelerde veya performansın kritik olduğu anlarda, Vanilla JS ile yapılan manipülasyonlar büyük fark yaratabilir. Hadi başlayalım! 💻

DOM Nedir ve Neden Önemli?
Kısaca, DOM (Document Object Model), tarayıcımızın bir web sayfasını bir ağaç yapısı (tree structure) olarak temsil etme şeklidir. JavaScript'in bu yapıyı okuyabilmesi, değiştirebilmesi ve ona dinamiklik katabilmesi için bir arayüzdür. Her HTML etiketi bu ağacın bir "düğümü" (node) olur. Bu ağacı etkili bir şekilde yönetebilmek, daha hızlı ve sorunsuz web uygulamaları demektir.

Element Seçme Sanatı
Bir elementi manipüle etmek için önce onu seçmeliyiz. İşte en sık kullanılan yöntemler:

  • document.getElementById('id'): Tek ve hızlı. ID'si verilen ilk elementi getirir.
  • document.querySelector('.sinif'): CSS seçicileri kullanarak ilk eşleşen elementi getirir. Çok güçlü!
  • document.querySelectorAll('.sinif'): Yukarıdakinin tüm eşleşenleri getiren versiyonu. Bir NodeList döndürür.
  • document.getElementsByClassName('sinif'): Tüm eşleşen sınıfları getirir (HTMLCollection döndürür).
  • document.getElementsByTagName('div'): Tagname'e göre seçim yapar.

Pro ipucu: Modern projelerde genellikle `querySelector` ve `querySelectorAll` yeterli oluyor. Çok daha esnekler. 🎯

Temel Manipülasyon İşlemleri
Elementi seçtik, şimdi onunla oynayalım!

  • İçerik Değiştirme: `element.textContent` (sadece metin) veya `element.innerHTML` (HTML dahil) kullanılır. Güvenlik için mümkünse `textContent` tercih edin.
  • Stil Değiştirme: `element.style.backgroundColor = 'red';` gibi. Ancak, çok fazla stil değişikliği yapacaksanız, CSS sınıfı ekleyip çıkarmak (classList) çok daha temiz ve performanslıdır.
  • Özellik (Attribute) Yönetimi: `element.getAttribute('href')`, `element.setAttribute('data-info', 'deger')`, `element.removeAttribute('disabled')`.

Sihirli Değnek: classList API
Bu API, CSS sınıflarını yönetmek için birebirdir. Mutlaka öğrenin!

  • `element.classList.add('aktif', 'kutu')`: Birden fazla sınıf ekler.
  • `element.classList.remove('pasif')`: Sınıfı kaldırır.
  • `element.classList.toggle('gizli')`: Varsa kaldırır, yoksa ekler. Butonlarla menü aç/kapa için mükemmel!
  • `element.classList.contains('aktif')`: Sınıfın olup olmadığını kontrol eder (true/false döner).

DOM'a Yeni Elementler Eklemek
Dinamik içerik oluşturmanın iki ana yolu var:

1. innerHTML ile: Hızlı ve tek seferde komple HTML yapısı eklemek için kullanışlı. Ancak, mevcut event listener'ları sıfırlayabilir ve dikkatli kullanılmazsa XSS açığı riski taşır.
2. createElement ile: Daha güvenli ve kontrollü yöntem.
```javascript
// 1. Yeni bir paragraf oluştur
const yeniParagraf = document.createElement('p');
yeniParagraf.textContent = 'Bu dinamik olarak eklendi!';
yeniParagraf.classList.add('vurgulu');

// 2. Ekleyeceğimiz yeri seç (örneğin, #container içine)
const container = document.getElementById('container');

// 3. Ekleme yap
container.appendChild(yeniParagraf); // En sona ekler
// container.prepend(yeniParagraf); // En başa ekler
// container.insertBefore(yeniParagraf, referansElement); // Belirli bir elementin önüne ekler
```

Performans İpuçları: DocumentFragment 🚀
Çok sayıda DOM elementi eklemeniz gerektiğinde, her ekleme tarayıcıyı "reflow" işlemine zorlar ve bu performansı düşürür. Çözüm: DocumentFragment. Bu, hafızada bulunan, ana DOM ağacının parçası olmayan hafif bir belge kapsayıcısıdır.

```javascript
const fragment = document.createDocumentFragment();

for (let i = 0; i < 100; i++) {
const li = document.createElement('li');
li.textContent = `Öğe ${i}`;
fragment.appendChild(li); // Fragment'a ekle, DOM'a değil!
}

const list = document.getElementById('listem');
list.appendChild(fragment); // TEK SEFERDE tüm fragment'ı DOM'a ekle!
```
Bu yöntemle, 100 kez değil, sadece 1 kez DOM güncellemesi yapmış olursunuz. Büyük fark yaratır! ⚙️

Event Delegation: Akıllı Dinleme
Liste elemanları gibi dinamik eklenen veya çok sayıda olan elementlere tek tek event listener eklemek verimsizdir. Bunun yerine, olayı üst bir elemente ekleyip, olayın hedefini (`event.target`) kontrol edersiniz. Buna **Event Delegation** denir.

```javascript
document.getElementById('todoList').addEventListener('click', function(event) {
// Tıklanan element 'silButonu' sınıfına sahip mi?
if (event.target.classList.contains('silButonu')) {
const silinecekItem = event.target.closest('.todo-item');
silinecekItem.remove();
console.log('Görev silindi!');
}
});
```
Bu sayede, listeye sonradan eklenen butonlar da otomatik olarak bu dinleyiciden faydalanır. Harika değil mi?

**Son Söz**
Framework'ler hayatımızı kolaylaştırsa da, altında yatan bu temel konseptleri bilmek, daha iyi bir geliştirici olmanın anahtarı. DOM manipülasyonu, JavaScript'in kalbinde yer alır. Bu teknikleri iyi öğrenip, özellikle performans odaklı yaklaşımları (DocumentFragment, Event Delegation) uyguladığınızda, uygulamalarınızın akıcılığı gözle görülür şekilde artacaktır.

Umarım bu rehber faydalı olmuştur. Sorularınızı forumda sormaktan çekinmeyin! Bir sonraki yazıda görüşmek üzere, kodlamaya devam! 👨‍💻👩‍💻
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri