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
, belirtilenid
niteliğine sahip bir öğeyi getirir.querySelector
, bir CSS seçici kullanarak bir öğe getirir.createElement
, yeni bir HTML öğesi oluşturur.
Kod Açıklaması
getElementById
kullanarakid
niteliğine sahip bir elementi alır ve metnini değiştirir.querySelector
ile bir buton elementi seçer ve ona bir tıklama (click) olay dinleyicisi ekler. Tıklandığında,createElement
ile yeni birdiv
elementi 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.setAttribute
metodu, bir öğeye bir nitelik atar.
Kod Açıklaması
- Bu kod,
querySelector
ile alınan elementlerin içeriğinininnerHTML
vetextContent
ile ayarlanması,classList
ile sınıf eklenmesi vesetAttribute
ile ö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ğrudanforEach
ile 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ğinclick
veyainput
, temsil eder.preventDefault
metodu, 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 vetype
ise olayın türünü belirtir (bu durumda,"submit"
).preventDefault
metodunu ç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
MouseEvent
kullanı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.0
sol tuştur,1
orta tuştur, ve2
sağ 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ğinEnter
veyaa
.code
, klavyedeki bir tuşa karşılık gelen koddur.altKey
,ctrlKey
veshiftKey
,Alt
,Ctrl
veyaShift
tuş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çinKeyboardEvent
kullanır. Ayrıca,Enter
tuş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
FocusEvent
kullanı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.