TypeScript'te DOM Manipülasyonu/Olay İşleme için Kullanılan Sınıflar
Bu makalede, TypeScript'te DOM manipülasyonu/olay işleme için kullanılan sınıfları açıklayacağız.
Document sınıfı, Element ve NodeList sınıfları ile çeşitli olaylarla ilgili sınıfları kod örnekleriyle öğrenebilirsiniz.
YouTube Video
TypeScript'te DOM Manipülasyonu/Olay İşleme için Kullanılan Sınıflar
TypeScript'te DOM manipülasyonu ve olay işlemesi için ağırlıklı olarak Document Object Model (DOM) arayüzleri kullanılır. DOM manipülasyonu ve olay işleme sırasında standart JavaScript sınıfları ve arayüzleri kullanılır, ancak TypeScript'te bunlara tür bilgisi eklenerek daha güvenli bir çalışma sağlanır.
Aşağıda, DOM manipülasyonu ve olay işleme sırasında yaygın olarak kullanılan sınıflar ve arayüzler açıklanmaktadır.
DOM Manipülasyonu için Kullanılan Temel Sınıflar/Arayüzler
Document
Document, HTML veya XML belgelerini temsil eden bir nesnedir. DOM ağacına erişmek veya öğeleri aramak için kullanılır.
Kod Örneği
1// Get the element using getElementById
2const element = document.getElementById('myElement') as HTMLDivElement | null;
3if (element) {
4 element.textContent = 'Hello, TypeScript!';
5}
6
7// querySelector can specify a generic type for more precise typing
8const button = document.querySelector<HTMLButtonElement>('#myButton');
9button?.addEventListener('click', () => {
10 console.log('Button clicked!');
11
12 // Create a new element dynamically
13 const newDiv = document.createElement('div');
14 newDiv.textContent = 'New element created!';
15 document.body.appendChild(newDiv);
16});Ana Metotlar
getElementById, belirtilenidniteliğine sahip bir öğeyi getirir.querySelector, bir CSS seçici kullanarak bir öğe getirir.createElement, yeni bir HTML öğesi oluşturur.
Kod Açıklaması
getElementByIdkullanarakidniteliğine sahip bir elementi alır ve metnini değiştirir.querySelectorile bir buton elementi seçer ve ona bir tıklama (click) olay dinleyicisi ekler. Tıklandığında,createElementile yeni birdivelementi oluşturur ve ana içeriğe ekler. DOM işlemleri sırasında tür güvenliğini sağlamak için generics ve tip doğrulamaları kullanılır.
Element
Element, DOM'daki bireysel HTML öğelerini temsil eden bir arayüzdür. DOM'u manipüle ederken en yaygın olarak kullanılır.
Kod Örneği
1// Use querySelector to manipulate element properties
2const divElement = document.querySelector<HTMLDivElement>('.myClass');
3if (divElement) {
4 // Set innerHTML
5 divElement.innerHTML = '<strong>Hello with innerHTML!</strong>';
6
7 // Set textContent
8 divElement.textContent = 'Hello with textContent!';
9
10 // Add a new class
11 divElement.classList.add('newClass');
12
13 // Set a custom attribute
14 divElement.setAttribute('data-role', 'content');
15}Temel Özellikler ve Metotlar
innerHTMLözelliği, bir öğenin HTML içeriğini ayarlamanıza veya almanıza olanak tanır.textContentözelliği, bir öğenin metin içeriğini ayarlamanıza veya almanıza olanak tanır.classList, sınıfları yönetmek için kullanılan bir özelliktir; sınıf eklemenizi, kaldırmanızı ve değiştirmenizi sağlar.setAttributemetodu, bir öğeye bir nitelik atar.
Kod Açıklaması
- Bu kod,
querySelectorile alınan elementlerin içeriğinininnerHTMLvetextContentile ayarlanması,classListile sınıf eklenmesi vesetAttributeile özel niteliklerin atanmasına bir örnektir. İşlemler generics kullanılarak tür güvenli bir şekilde gerçekleştirilir.
NodeList ve HTMLCollection
NodeList ve HTMLCollection, birden fazla DOM öğesi içeren koleksiyonları temsil eder. Örneğin, querySelectorAll bir NodeList döndürür, getElementsByClassName ise bir HTMLCollection döndürür.
Kod Örneği
1// NodeList supports forEach iteration
2const divs: NodeListOf<HTMLDivElement> = document.querySelectorAll('div');
3divs.forEach(div => {
4 div.textContent = 'Updated!';
5});
6
7// HTMLCollection is not directly iterable, convert it to an array
8const spans: HTMLCollectionOf<HTMLSpanElement> =
9 document.getElementsByClassName('span-item') as HTMLCollectionOf<HTMLSpanElement>;
10Array.from(spans).forEach(span => {
11 span.textContent = 'Changed!';
12});- Bu kod, bir
NodeList'i doğrudanforEachile işlemenin ve birHTMLCollection'ı yineleme için diziye dönüştürmenin bir örneğidir.
Olay İşleme için Kullanılan Temel Sınıflar/Arayüzler
Event
Event, DOM'da meydana gelen tüm olaylar için temel sınıftır. Tıklamalar, girişler ve sayfa yüklemeleri gibi çeşitli olaylar Event sınıfını genişletir.
Kod Örneği
1const form = document.querySelector<HTMLFormElement>('#myForm');
2form?.addEventListener('submit', (event: Event) => {
3 // target refers to the element that triggered the event (the form)
4 const target = event.target as HTMLFormElement;
5
6 // type shows the kind of event, e.g., "submit"
7 console.log(`Event type: ${event.type}`);
8
9 // preventDefault disables the default form submission
10 event.preventDefault();
11 console.log('Form submission prevented.');
12});Temel Özellikler ve Metotlar
targetözelliği, olayın gerçekleştiği öğeyi (EventTarget) temsil eder.type, gerçekleşen olayın türünü, örneğinclickveyainput, temsil eder.preventDefaultmetodu, olayın varsayılan davranışını iptal eder.
Kod Açıklaması
- Bu kod, bir forma
submit(gönderme) olay dinleyicisinin nasıl ekleneceğini gösterir.target, olayın gerçekleştiği form elementini ifade eder vetypeise olayın türünü belirtir (bu durumda,"submit").preventDefaultmetodunu çağırarak, sayfa yönlendirme veya yeniden yükleme gibi varsayılan form gönderme davranışlarını devre dışı bırakabilirsiniz. Bunun yerine, burada özel bir işlem—loglama çıktısı—gerçekleştirilir.
MouseEvent
MouseEvent: Fare ile ilgili olayları temsil eder. click ve mousemove gibi fare olayları bu sınıfı kullanır.
Kod Örneği
1const div = document.getElementById('clickArea');
2if (div) {
3 div.addEventListener('click', (event: MouseEvent) => {
4 console.log(`Clicked at: (${event.clientX}, ${event.clientY})`);
5 });
6}- Bu kod, fare koordinatlarını kaydetmek için
MouseEventkullanımının bir örneğidir.
Ana Özellikler
clientX, fare işaretçisinin sayfadaki X koordinatıdır.clientY, fare işaretçisinin sayfadaki Y koordinatıdır.button, hangi fare tuşuna basıldığını gösterir.0sol tuştur,1orta tuştur, ve2sağ tuştur.
KeyboardEvent
KeyboardEvent: Klavye işlemleriyle ilgili olayları temsil eder. keydown ve keyup olayları bu kategoriye girer.
Kod Örneği
1document.addEventListener('keydown', (event: KeyboardEvent) => {
2 // Show the key name (e.g., "Enter", "a")
3 console.log(`Key pressed: ${event.key}`);
4
5 // Show the physical key code (e.g., "Enter", "KeyA")
6 console.log(`Key code: ${event.code}`);
7
8 // Check if Alt/Ctrl/Shift key was pressed
9 console.log(`Alt pressed: ${event.altKey}`);
10 console.log(`Ctrl pressed: ${event.ctrlKey}`);
11 console.log(`Shift pressed: ${event.shiftKey}`);
12
13 if (event.key === 'Enter') {
14 console.log('Enter was pressed');
15 }
16});Ana Özellikler
key, basılan tuşun adıdır, örneğinEnterveyaa.code, klavyedeki bir tuşa karşılık gelen koddur.altKey,ctrlKeyveshiftKey,Alt,CtrlveyaShifttuşuna basılıp basılmadığını gösteren özelliklerdir.
Kod Açıklaması
- Bu kod, basılan tuşun adını (
key), ilgili tuş kodunu (code) ve değiştirici tuşlar (altKey,ctrlKey,shiftKey) basılı olup olmadığını loglamak içinKeyboardEventkullanır. Ayrıca,Entertuşuna basıldığında özel bir işlem gerçekleştirir.
FocusEvent
FocusEvent: Odaklanma veya odak kaybetme olaylarıyla ilgilidir. focus ve blur olayları bu kategoriye girer.
Kod Örneği
1const inputElement = document.getElementById('myInput');
2if (inputElement) {
3 inputElement.addEventListener('focus', (event: FocusEvent) => {
4 console.log('Input focused');
5 });
6
7 inputElement.addEventListener('blur', (event: FocusEvent) => {
8 console.log('Input lost focus');
9 });
10}- Bu kod, bir giriş alanının odağı aldığını veya kaybettiğini algılama ve kaydetme için
FocusEventkullanımının bir örneğidir.
TypeScript'te Yazım
TypeScript kullanırken, DOM manipülasyonu ve olay yönetiminde tür kontrolü geliştirilir. TypeScript'te tür güvenli DOM manipülasyonu ve olay yönetimine dair örnekler aşağıdadır.
Türlendirilmiş Olay Dinleyiciler
Olay dinleyicileri eklerken, olay türünü belirtmek tür kontrolü yapar ve yanlış özelliklere erişimi engeller.
1const input = document.querySelector<HTMLInputElement>('#myInput');
2// Event listener with explicit type annotation for safety
3input?.addEventListener('input', (event: Event) => {
4 // event.target is EventTarget, so it needs to be cast to the correct type
5 const target = event.target as HTMLInputElement;
6 console.log(`Current value: ${target.value}`);
7});- Bu kod, giriş olaylarını işlemek ve bir giriş alanının mevcut değerini güvenli bir şekilde elde edip kaydetmek için tipli bir olay dinleyicisi kullanımının bir örneğidir.
Genel Olay Yönetimi
TypeScript'te jenerikleri kullanarak birden fazla olay türünü destekleyen genel olay yönetimi gerçekleştirebilirsiniz.
1// Generic event handler function
2function handleEvent<T extends Event>(event: T) {
3 console.log(`Event type: ${event.type}`);
4 if (event.target instanceof HTMLElement) {
5 console.log(`Target element: ${event.target.tagName}`);
6 }
7}
8
9const input = document.querySelector<HTMLInputElement>('#myInput');
10input?.addEventListener('input', handleEvent);- Bu kod, olay tipini ve hedef öğenin etiket adını kaydeden, jenerikler kullanan genel bir olay işleyici kullanımının bir örneğidir.
Özet
TypeScript'te, DOM manipülasyonu ve olay yönetimi sırasında standart DOM API'lerine türler uygulanarak kod güvenliği ve okunabilirliği artırılır. Document ve Element gibi sınıfları ve Event, MouseEvent, KeyboardEvent gibi olaylarla ilgili sınıfları kullanarak tür güvenli geliştirme yapmak mümkündür. Ayrıca, querySelector<T>() veya HTMLCollectionOf<T> kullanmak, tip güvenli DOM işlemlerini mümkün kılar.
Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.