jQuery ve DOM işlemleri
DOM ismi verilen bir standart sayesinde web sayfamızdaki her eleman (resim, link, buton) birer nesne olarak değerlendirilir. Biz de javaScript yardımıyla bu nesnelere erişebilir ve üzerinde işlemler yapabiliriz. Yani bir resmi yenisiyle değiştirebilir, bir linkin başına/sonuna yeni nesneler ekleyebilir, bir buton nesnesinin birebir kopyasını çıkartabiliriz. jQuery sayesinde ise bu işlemleri çok daha kolay bir şekilde yapabiliyoruz.
Konuya başlamadan önce başlıklara bir gözatalım:
- Değiştirme
- Ekleme
- Silme
- Kopyalama
1. Değiştirme
Bir elemanın tamamını veya sadece içeriğini değiştirmek için kullanabileceğimiz jQuery fonksiyonları html(), text(), replaceWith() ve replaceAll() isimli fonksiyonlar. html() ve text() fonksiyonları bir elemanın "içeriğini" değiştirirken, replaceWith() ve replaceAll() fonksiyonları ise bir elemanın "tamamını" değiştirir.

html(): Bu fonksiyon ile bir elemanın içeriğini HTML etiketleriyle birlikte alabilirsiniz ve değiştirebilirsiniz. innerHTML özelliğine benzer. Kullanımı ise şöyledir:
// içerik al
$('p#metin').html();
// içerik değiştir
$('p#metin').html('yeni içerik');
Bu fonksiyon ile ilgili bir örneği Örnek 1A sayfasında bulabilirsiniz.
text(): Bu fonksiyon sayesinde bir elemanın sahip olduğu içeriği “düz metin” olarak alabiliyoruz veya değiştirebiliyoruz. innerText özelliğine benzer. Kullanımı ise şöyledir:
// içerik al
$('p#metin').text();
// içerik değiştir
$('p#metin').text('yeni içerik');
Bu fonksiyon ile ilgili bir örneği Örnek 1B sayfasında bulabilirsiniz.
replaceWith(): Bu fonksiyon sayesinde bir elemanın kendisini başka bir eleman ile değiştirebiliriz. Örneğin bir butonu bir resim ile değiştirmek istiyorsanız bu fonksiyonu kullanmalısınız. ilk önce değiştirilecek elemanı belirtip, daha sonra da yeni elemanı belirtiyoruz. Kullanımı şöyledir:
// butonu resim ile değiştir
$('button').replaceWith('<img src="resim.jpg" />');
Bu fonksiyon ile ilgili bir örneği Örnek 1C sayfasında bulabilirsiniz.
replaceAll(): Bu fonksiyon biraz önce bahsettiğimiz replaceWith() fonksiyonuyla aynı işlemi yapmasına karşın ters şekilde çalışıyor. ilkönce yeni elemanı belirtip daha sonra değiştirilecek olan elemanı belirtiyoruz. Kullanımı şöyledir:
// bütün butonları resim ile değiştir
$('<img src="resim.jpg" />').replaceAll('button');
Bu fonksiyon ile ilgili bir örneği Örnek 1D sayfasında bulabilirsiniz.
2. Ekleme
jQuery’nin ekleme fonksiyonları sayesinde bir elemanın içerisine veya dışarısına yeni elemanlar ekleyebiliyoruz. Öncelikle bir elemanın içerisine yeni elemanlar eklerken kullanacağımız append() ve prepend()fonksiyonlarına bakalım.
append(): Bu fonksiyon ile bir elemanın sahip olduğu içeriğin "en sonuna" yeni bir eleman ekleyebiliriz. Alttaki örneğin uygulamasını Örnek 2A sayfasında bulabilirsiniz.
// örnek metin
<p id="metin">Merhaba</p>
// sonuna ekle
$('p#metin').append(' <strong>Erhan<strong>');
// sonuç
<p id="metin">Merhaba <strong>Erhan<strong></p>
prepend(): Bu fonksiyon ile bir elemanın sahip olduğu içeriğin "en başına" yeni bir eleman ekleyebiliriz. Alttaki örneğin uygulamasını Örnek 2B sayfasında bulabilirsiniz.
// örnek metin
<p id="metin">Merhaba</p>
// sonuna ekle
$('p#metin').prepend('<strong>Erhan<strong> ');
// sonuç
<p id="metin"><strong>Erhan<strong> Merhaba</p>
şimdi de bir elemanın dışına nasıl yeni elemanlar ekleyebiliriz ona bakalım. Bu iş için kullanacağımız fonksiyonlar after() ve before() olacak.
after(): Bu fonksiyon ile bir elemandan "sonra" yeni bir eleman ekleyebiliriz. Örneğin bir butondan sonra bir resim eklenebilir. Bu örneği Örnek 2C sayfasında bulabilirsiniz.
$('button').after('<img src="resim.jpg" />');
before(): Bu fonksiyon sayesinde bir elemandan "önce" yeni bir eleman ekleyebiliriz. Örneğin bir butondan önce bir resmin eklenmesini sağlayabiliriz. Bu örneği Örnek 2D sayfasında bulabilirsiniz.
$('button').before('<img src="resim.jpg" />');
jQueryâ??nin ekleme fonksiyonları aslında benim burada anlattığımla sınırla değil tabiki. Daha birçok ekleme fonksiyonu var. Bu yüzden lütfen jQueryâ??nin yardım belgelerine bakmayı ihmal etmeyin.
3. Silme
Pekçok durumda bir elemanı tamamen kaldırmak veya bir elemanın içerisindeki alt elemanları kaldırmak gerekebiliyor. Bu durumda jQuery’nin empty() veya remove() fonksiyonlarından birisini kullanmalıyız.
empty(): Bir elemanın içeriğini boşaltır. Örneğin ID özniteliği "alan" olan bir DIV elemanın içerisini boşaltmak/temizlemek için şöyle yapıyoruz:
$('div#alan').empty();
Bu örneği test etmek için Örnek 3A sayfasına bakabilirsiniz.
remove(): Bir elemanı tamamen ortadan kaldırır. Örneğin ID özniteliği "alan" olan bir DIV elemanı tamamen ortadan kaldırmak için şöyle yapıyoruz:
$('div#alan').remove();
Bu örneği test etmek için Örnek 3B sayfasına bakabilirsiniz.
4. Kopyalama
Eğer bir elemanın birebir kopyasını çıkartmak yani klonlamak istiyorsanız jQuery’nin clone() fonksiyonunu kullanmalısınız. Bu fonksiyon clone() ve clone(true) olmak üzere iki farklı şekilde kullanılıyor. Peki bir elemanın kopyasını neden çıkartma ihtiyacı duyarız? Bu sorunun cevabı için SpeedyShare sitesine girip “Upload more files at once” linkine tıklayın. Sadece bir örnek
clone(): Bir elemanın kopyasını çıkartır fakat elemanın sahip olduğu olayları (events) kopyalamaz. Daha önceden fare ile üzerine geldiğinizde rengi değişen bir elemanın, kopyasının üzerine geldiğinizde ise rengi değişmeyecektir. Bu örneğin uygulamasını Örnek 4A sayfasında görebilirsiniz. Bu fonksiyonunun kullanımı ise şöyledir:
// bir metin kutusunun kopyasını çıkar
$('input').clone();
clone(true): Bir elemanın kopyasını sahip olduğu olaylar (events) ile birlikte çıkartır. Yani daha önceden fare ile üzerine geldiğinizde rengi değişen bir elemanın, kopyasının üzerine geldiğinizde yine rengi değişecektir. Bu örnekle ilgili bir uygulamayı Örnek 4B sayfasında görebilirsiniz. Bu fonksiyonunun kullanımı ise şöyledir
// bir metin kutusunun kopyasını çıkar (olayları ile birlikte)
$('input').clone(true);
Kopyalama işlemleri sırasında olaylar (events) konusunun da ismi geçti. Eğer olaylar konusunu daha önceden okumadıysanız ya da yeniden okumak isterseniz jQuery ve Olaylar başlıklı yazıma bakabilirsiniz. Bu yazıdaki örnekleri ise buradan indirebilirsiniz.
















Güzel makale eburhan
insanı jquery’e özendiriyor valla, prototype’da bu kadar detaylı yok bu işlemler bildiğim kadarı ile.
clone özelliği mükemmel. Bakalım jQuery yazı serisinin 4. yazısı ne ile ilgili olacak. Yine serinin devamını beklediğimizi belirterek başarılarının devamını diliyorum.
Makale için teşekkürler Erhan çok güzel bir anlatım olmuş
insanın öğrenesi geliyor
güzel yazı olmuş. bunları yapmak bu kadar kolay mıydı
yorumların hepsine katılıyorum
ellerine sağlık
Eline sağlık Erhancım güzel makale olmuş gerçekten.
Yeri gelmişken bir sorunumu dile getireyim: Bir formda “yeni alan ekle” diye bir seçeneğim var yani ekleye tıklayınca SpeedShare’da olduğu gibi yeni alanlar ekliyor. Yani eklenen tek bir alan yok bir tablo satırı düşünün üç kolonlu her kolonda bir form elemanı var. şimdi ben bunu biraz klasik bir yöntemle yaptım, bir şablon HTML kodu oluşturdum (tablo satırının HTML kodunu) ID’lerin yazdırılacağı yere ID_BURAYA gibi bir ifade koydum ve ekleme sırasında bunları replace ile değiştirip append() ile tabloya ekliyorum. Fakat kod epey kalabalık oldu. Acaba clone() ile bu işlemi daha zahmetsiz yapabilmenin bir yolunu bilen varmı? Yani satırı kopyalamak kolay fakat satırın ve satır içindeki form elemanlarının ID’lerinin de değişmesi gerekiyor.
SpeedShare’i inceledim fakat o da benimkine benzer bir yöntem kullanmış ve haliyle pek işime yaramadı.
Bir de bir değişkenin dolu olup olmadığını kontrol etmek için jQuery’nin native bir metodu var mı ben göremedim. Hani PHP’de kullandığımız empty() gibi jQuery’de var mı öyle bir şey. Zira yoksa kendim basit bir fonksiyon yazıp “undefined”, “NULL veya null” ve “false” için, diziler için de eleman sayısının 0 olup olmadığını kontrol eden bir kontrol yaptırmayı planlıyorum.
Güzel bir makale eline sağlık
@Orhan Veli FiRiK
Eğer yanlış anlamadıysam each() fonksiyonunun yardımıyla birşeyler yapabilirsiniz. ilk önce copy() ile kopyalanacak elemanları alırsınız. Daha sonra bu kopyaların herbirisine each() fonksiyonu içerisinden bir ID ataması yaparsınız. ID ataması için de attr() fonksiyonunu kullanabilirsiniz. Anlattığım bu olayı, alttaki örnek fonksiyonda görebilirsiniz mesela. Umarım sizin yapmak istediğiniz işleme yardımcı olur.
Değişkenler konusunda ise benim bildiğim bir jQuery metodu yok. Aslında olmasına gerek de yok bence (: Çünkü bir değişkenin içeriğini doğal javaScript yöntemleriyle kolayca kontrol edebiliyoruz. Mesela alttaki örnekte
typeofile bir değişkenin tanımlı olup olmadığını kolayca kontrol edebiliyoruz.Selam,
jquery de bir bug mı var acaba?
örneğin http://docs.jquery.com/Selectors/disabled bu sayfada yani doc sayfalarında örnekler veriyorlar. mesela link verdiğim sayfada disabled olan inputa yazı yazdırıyor. çalışıyor buraya kadar sorun yok. o sayfada bir linke tıklayın başka bir sayfaya geçin sonra tarayıcının geri düğmesini kullanarak önceki sayfaya dönün artık fonksiyonun çalışmadığını göreceksiniz. 2 input ta boş. bu olay bütün doc sayfalarında aynı
Ne diyebiliriz ki? Tek kelime ile yine harika !
Teşekkürler…
JQuery gerçekten işi çok kolaylaştırıyor. Bir kaç gündür kullanıyorum, web sitesindeki belgelerini okuyarak her işimi yapabildim. Bir dilin veya bunun gibi bir aracın en önemli parçalarından biri dökümantasyonudur, JQuery’de de bu iyi yapılmış, tabii sürekli geliştirilmesi gerekli..
Projemde jquery ile ilgili her konuda yardımcı oldunuz. Çok teşekkürler.
şöyle bir durumla karşılaştım:
Firefox üzerinde bir DOM nesnesinin innerHTML karşılığı orijinal markup olmasına karşın, IE üzerinde client tarafından gerçekleştirilen modifikasyonları da barındırıyor. Bu durum jQuery’de html(), attr(‘innerHTML’) ve clone() işlevlerinin sonuçlarına da yansıyor.
iki tarayıcıyla da stabil sonuçlar döndüren bir yöntem bulamadım. jQuery core da yapılmış bir iyileştirmeden veya plugin benzeri bir çözümden haberdar mısınız? Veya bir fikriniz var mı?
Bunun dışında kendi özel durumumu açıklamak gerekirse; ben yapılmış modifikasyonları barındıran innerHTML sonucuna ulaşmaya çalışıyorum.
Kolay gelsin..
.html veya .load ile değiştirdiğimiz veri içeriğini ilk haline nasıl getirebiliriz ?
@Mustafa
içeriği değiştirmeden önce data ile yedekleyebilirsin.
Teşekkürler Erhan, şimdi farkına vardım. Sayfa kaynağında ne kadar gözüküyor olsa bile, aslında yapı değişiyor.
Çok sağol.. Çok iyi. Allah razı olsun..
//
Küçük bir düzeltme.. Clone kısmında konu detaylıca verilmemiş..
Örneğe baktığımda nasıl olduğunu anladım. Belki düzeltilir.