ramesaliyev

ramesaliyev


0 takip ediyor | 0 takip ediliyor


Bilgi alanları


İlgi alanları

Ajax Konusunda Uzmanlaşma, Bölüm 5 ( 5)

Tabi sürekli sadece 0. itemi sileceksek, for döngüsünüde düzeltmeliyiz

for (i=0; i<imgElements.length; i++) {
olarak yazılmış lakin burdaki img'ler silindiğinden döngü her döndüğünde imgElements.length değeri 1 eksilmektedir. E bu durumda da i = 10 ve kalan resimler = 10 olduğunda işlem kapanıyor. sonra 5 olunca sonra 2 sonra 1. Yarı yarıya bölüyor yani kendini doğal olarak. Bunu aşmak için kodu şöyle düzenledim.
imgElementsLength = imgElements.length;
for (i=0; i<imgElementsLength; i++) {

Ajax Konusunda Uzmanlaşma, Bölüm 5 ( 5)

Bir önceki yorumum yanlış olmuş, hata farklı bir yerdeymiş;Öznitelik düğümleri kısmında kod hatası bulunmakta, birkaç şey atlanmış.

for (i=0; i<imgElements.length; i++) {
var imgElement = imgElements.item[i];

olarak yazılan kodda syntax hatası : imgElements.item[i] yerine imgElements.item(i) olmalı yani köşeli değil normal parantezlerle.

Bundan ayrı olarak daha ciddi bir hata var ki o da şudur; For döngüsü i'yi 0dan büyütmeye başlıyor lakin elementlerin sayısı gittikçe düşüyor.
Örnekle açıklamak daha sağlıklı olacak; 20 resmimiz varsa, i gittikçe büyürken 10a geldi diyelim, diğer taraftan da resimlerimiz 1'den başlayarak 10a kadar silindi. Mesele şu ki her element silindiğinde item listesinin sırası geriye doğru kayıyor: Yani mesela 2numaralı item 1 numaraya geliyor. E zaten mantıklısı da bu. İşte burada bir çakışma meydana geliyor. Diyelim ki döngü 10 kez döndü ve i = 10 oldu, element sayısı da 10 kere silindiği için sürekli geriye doğru kaydı ve 20-10 = kaldı 10 element, lakin i kaldığı yerden devam ediyor ve 11. itemi silmeye çalışıyor. Durum böyle olunca 11. item olmadığından hata oluşuyor ve döngü yarıda kesiliyor. Toplam item sayısının yarısında oluşuyor sürekli bu olay, i'nin imgElements.length'i aştığı yerde yani.

Peki bunu nasıl aşabiliriz ?

Bunu aşmak için iki yöntem var ya döngüyü tersten başlatacağız. Ya da item silerken sürekli 0. itemi sileceğiz. Tersten başlatmak için;
for (i=imgElements.length-1; i>-1; i--) {

Veya sürekli 0. itemi silmek için;
var imgElement = imgElements.item(0)

Ajax Konusunda Uzmanlaşma, Bölüm 5 ( 5)



Bir önceki yorumum yanlış olmuş, hata farklı bir yerdeymiş;

Öznitelik düğümleri kısmında kod hatası bulunmakta, birkaç şey atlanmış.

for (i=0; i-1; i--) {

Veya sürekli 0. itemi silmek için;

var imgElement = imgElements.item(0)

Ajax Konusunda Uzmanlaşma, Bölüm 5 ( 5)


Öznitelik düğümleri kısmındaki for döngüsünde hata var.

for (i=0; i<imgElements.length; i++) {
olarak yazılmış lakin burdaki img'ler silindiğinden döngü her döndüğünde imgElements.length değeri 1 eksilmektedir. E bu durumda da i = 10 ve kalan resimler = 10 olduğunda işlem kapanıyor. sonra 5 olunca sonra 2 sonra 1. Yarı yarıya bölüyor yani kendini doğal olarak. Bunu aşmak için kodu şöyle düzenledim.
imgElementsLength = imgElements.length; for (i=0; i<imgElementsLength; i++) {

Ajax Konusunda Uzmanlaşma, Bölüm 5 ( 5)

Yalnız şöyle bir durum var burada, Liste 1. DOM içinde düğüm özelliklerinin kullanılması" örneğini html içerisine alıp kullanmak isteyecek arkadaşlar (ki ben yaptım bunu) bir sorunla karşılaşacaklardır. bodyElement null değeriyle döneceğinden nodeName de undefined olacaktır.

Yani;

var bodyElement = headElement.nextSibling; while (bodyElement.nodeName.toLowerCase() != "body") { bodyElement = bodyElement.nextSibling; }
kod bloğunun altına şunu eklerseniz;
alert(bodyElement.nodeName);
alert filan alamazsınız. (örnek ben orada iyice anlayabilmek için body'nin de nodenamesini çekeyim demiştim) Bunun nedeni benim anladığım kadarıyla bu kodlar (javascript kodları) işlendiği zaman daha "body" elementinin oluşturulmamış olmasıdır. Lakin daha sonraki

Liste 3. DOM'nin kullanıldığı bazı JavaScript kodlarının bulunduğu bir HTML dosyası örneğinde bu kodlar bir fonksiyon ile çalıştırıldığında body kullanılabiliniyor.

Zaten daha önceki yazıda da DOM ile ancak oluşturulmuş elementleri düzenleyebilirsiniz denilmişti, daha yüklenmemişleri değil tabiki.

Yani eğer sayfanız yüklenir yüklenmez body ile ilgili bir şeyler yapmak istiyorsanız, bu DOM işlemini bir window.onload fonksiyonuna atamayı unutmayın.

Sanırım çok konuştum. Saygı sevgiler.