JavaScript’te NodeList
‘i Tersine Çevirme Sorununu Anlamak
JavaScript, web geliştiriciliğinde Belge Nesne Modeli (DOM) üzerinde manipülasyon yapma konusunda güçlü bir dildir. Ancak birçok geliştirici, DOM nesnelerinden oluşan koleksiyonlarla çalışırken sorunlarla karşılaşır, özellikle de bu koleksiyonları normal diziler gibi işlemeye çalıştıklarında. Yaygın bir sorun, getElementsByTagName()
gibi DOM fonksiyonlarıyla elde edilen koleksiyonlara Array.reverse()
metodunu kullanmaya çalışmaktır. Bu blog yazısında, bunun nedenini keşfedeceğiz ve bu koleksiyonlarla etkili bir şekilde nasıl çalışacağımızı öğreneceğiz.
Karışıklığa Neden Olan Kod
Aşağıdaki JavaScript kod parçasını göz önünde bulundurun:
var imagesArr = new Array();
imagesArr = document.getElementById("myDivHolderId").getElementsByTagName("img");
imagesArr.reverse();
reverse()
metodu imagesArr
üzerinde çağrıldığında, Firefox 3 gibi tarayıcılarda bir hata meydana gelir ve şu mesajı alırsınız:
imagesArr.reverse is not a function
Bu Neden Oluyor?
Anlaşılması gereken kritik nokta, imagesArr
değişkeninin atandıktan sonraki doğasıdır. getElementsByTagName()
kullandığınızda aslında bir NodeList
alıyorsunuz, dizi değil. İşte bu ayrımın neden önemli olduğu:
NodeList
ve Dizi Anlayışı
NodeList
Nedir?
NodeList
, çeşitli DOM metodları tarafından döndürülebilen bir düğüm koleksiyonudur. Bu özel durumda,getElementsByTagName("img")
, belirtilen elemanın (bu durumda"myDivHolderId"
) altında bulunan tüm<img>
öğelerini döndürür.NodeList
, bir dizi gibi döngüye alınabilse de,reverse()
,map()
, veyafilter()
gibi dizi metodlarının kullanılmasını engelleyen temel farklılıkları vardır.
NodeList
ile Diziler Arasındaki Temel Farklar
- Tür:
NodeList
bir nesnedir, diziler ise JavaScript’te özel metotlara sahip yerleşik bir yapıdır. - Dinamik Güncelleme: Bir
NodeList
‘teki elemanlar dinamik olarak değişebilir. Eğer DOM’a daha fazla<img>
etiketi eklenirse, bunlar otomatik olarakNodeList
‘e dahil edilirken, bir dizi, yeni öğeleri açıkça eklemediğiniz sürece otomatik olarak güncellenmez.
NodeList
‘i Etkili Bir Şekilde Tersine Çevirme
Eğer bir NodeList
‘in sırasını tersine çevirmeye ihtiyacınız varsa, önce diziyi dönüştürebilirsiniz. Bunu nasıl yapacağınız aşağıda açıklanmıştır:
Çözüm: Dönüştür ve Tersine Çevir
NodeList
‘i bir Diziye Dönüştürün:NodeList
‘i bir diziye dönüştürmek içinArray.from()
metodunu veya yayılma operatörünü kullanabilirsiniz.
Array.from()
Kullanarak
var imagesArr = Array.from(document.getElementById("myDivHolderId").getElementsByTagName("img"));
imagesArr.reverse(); // Artık güvenle tersine çevirebilirsiniz
Yayılma Operatörünü Kullanarak
var imagesArr = [...document.getElementById("myDivHolderId").getElementsByTagName("img")];
imagesArr.reverse(); // Ayrıca tersine çevirme sağlar
Son Düşünceler
NodeList
ile bir dizi arasındaki farkı anlayarak JavaScript kodunuzda karışıklıkları ve hataları önleyebilirsiniz. Eğer DOM nesneleri koleksiyonu üzerinde dizi metodlarını kullanmanız gerekiyorsa, her zaman önce NodeList
‘i bir diziye dönüştürdüğünüzden emin olun.
NodeList
‘in yapı ve davranışları hakkında daha fazla bilgi için W3C DOM Level 2 Core Specification adresini kontrol edebilirsiniz.
Bu stratejileri aklınızda bulundurarak JavaScript’te DOM öğeleriyle çalışmak çok daha kolay ve verimli hale gelecek, böylece sizi potansiyel hatalardan ve hayal kırıklıklarından kurtaracaktır.