Kelas yang Digunakan untuk Manipulasi DOM/Penanganan Acara dalam TypeScript
Dalam artikel ini, kami akan menjelaskan kelas-kelas yang digunakan untuk manipulasi DOM/penanganan acara dalam TypeScript.
Anda dapat mempelajari kelas Document, kelas Element dan NodeList, serta berbagai kelas terkait event melalui contoh kode.
YouTube Video
Kelas yang Digunakan untuk Manipulasi DOM/Penanganan Acara dalam TypeScript
Untuk manipulasi DOM dan penanganan acara dalam TypeScript, antarmuka Document Object Model (DOM) terutama digunakan. Dalam manipulasi DOM dan penanganan acara, kelas dan antarmuka JavaScript standar digunakan, tetapi dalam TypeScript, informasi tipe ditambahkan ke dalamnya, memungkinkan operasi yang lebih aman.
Berikut menjelaskan kelas dan antarmuka yang biasa digunakan dalam manipulasi DOM dan penanganan acara.
Kelas/Antarmuka Utama yang Digunakan untuk Manipulasi DOM
Document
Document adalah objek yang merepresentasikan dokumen HTML atau XML. Digunakan untuk mengakses pohon DOM atau mencari elemen.
Contoh Kode
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});Metode Utama
getElementByIdmengambil elemen dengan atributidyang ditentukan.querySelectormengambil elemen menggunakan selektor CSS.createElementmembuat elemen HTML baru.
Penjelasan Kode
- Kode ini mengambil elemen dengan atribut
idmenggunakangetElementByIddan mengubah teksnya. Kode ini juga mendapatkan elemen tombol menggunakanquerySelectordan menambahkan pendengar event klik. Saat diklik, kode ini membuat elemendivbaru menggunakancreateElementdan menambahkannya ke konten utama. Generik dan penegasan tipe digunakan untuk memastikan keamanan tipe selama operasi DOM.
Element
Element adalah antarmuka yang merepresentasikan elemen HTML individual dalam DOM. Sering digunakan saat melakukan manipulasi DOM.
Contoh Kode
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}Properti dan Metode Utama
- Properti
innerHTMLmemungkinkan Anda untuk mengatur atau mengambil konten HTML dari sebuah elemen. - Properti
textContentmemungkinkan Anda untuk mengatur atau mengambil konten teks dari sebuah elemen. classListadalah properti untuk memanipulasi kelas, memungkinkan Anda untuk menambah, menghapus, dan mengubah kelas.- Metode
setAttributemenetapkan sebuah atribut pada elemen.
Penjelasan Kode
- Kode ini menunjukkan contoh mengatur konten menggunakan
innerHTMLdantextContentuntuk elemen yang diambil denganquerySelector, menambah kelas denganclassList, dan mengatur atribut khusus dengansetAttribute. Operasi dilakukan secara aman terhadap tipe menggunakan generik.
NodeList dan HTMLCollection
NodeList dan HTMLCollection merepresentasikan koleksi yang berisi beberapa elemen DOM. Sebagai contoh, querySelectorAll mengembalikan NodeList, dan getElementsByClassName mengembalikan HTMLCollection.
Contoh Kode
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});- Kode ini menunjukkan manipulasi langsung
NodeListdenganforEach, dan mengubahHTMLCollectionmenjadi array untuk iterasi.
Kelas/Antarmuka Utama yang Digunakan untuk Penanganan Acara
Event
Event adalah kelas dasar untuk semua acara yang terjadi di DOM. Berbagai acara seperti klik, input, dan pemuatan halaman merupakan perluasan dari kelas Event.
Contoh Kode
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});Properti dan Metode Utama
- Properti
targetmerepresentasikan elemen (EventTarget) tempat event terjadi. typemerepresentasikan jenis event yang terjadi, seperticlickatauinput.- Metode
preventDefaultmembatalkan aksi default dari event.
Penjelasan Kode
- Kode ini mendemonstrasikan cara menambahkan pendengar event
submitke sebuah formulir.targetmengacu pada elemen formulir tempat event terjadi, dantypemenunjukkan jenis event (dalam kasus ini,"submit"). Dengan memanggil metodepreventDefault, Anda dapat menonaktifkan perilaku pengiriman formulir default seperti navigasi atau pemuatan ulang halaman. Sebagai gantinya, proses khusus—seperti mencatat keluaran—dijalankan di sini.
MouseEvent
MouseEvent merepresentasikan peristiwa yang terkait dengan operasi mouse. Peristiwa mouse seperti click dan mousemove menggunakan kelas ini.
Contoh Kode
1const div = document.getElementById('clickArea');
2if (div) {
3 div.addEventListener('click', (event: MouseEvent) => {
4 console.log(`Clicked at: (${event.clientX}, ${event.clientY})`);
5 });
6}- Kode ini adalah contoh penggunaan
MouseEventuntuk mencatat koordinat mouse.
Properti Utama
clientXadalah koordinat X dari pointer mouse di dalam halaman.clientYadalah koordinat Y dari pointer mouse di dalam halaman.buttonmenunjukkan tombol mouse mana yang ditekan.0adalah tombol kiri,1adalah tombol tengah, dan2adalah tombol kanan.
KeyboardEvent
KeyboardEvent merepresentasikan peristiwa yang terkait dengan operasi keyboard. Peristiwa keydown dan keyup termasuk dalam kategori ini.
Contoh Kode
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});Properti Utama
keyadalah nama tombol yang ditekan, sepertiEnterataua.codeadalah kode yang sesuai dengan tombol pada keyboard.altKey,ctrlKey, danshiftKeyadalah properti yang menunjukkan apakah tombolAlt,Ctrl, atauShiftditekan.
Penjelasan Kode
- Kode ini menggunakan
KeyboardEventuntuk mencatat nama tombol yang ditekan (key), kode tombol yang sesuai (code), serta apakah tombol pengubah (altKey,ctrlKey,shiftKey) ditekan. Kode ini juga menjalankan tindakan khusus ketika tombolEnterditekan.
FocusEvent
FocusEvent berkaitan dengan peristiwa mendapatkan atau kehilangan fokus. Peristiwa focus dan blur termasuk dalam kategori ini.
Contoh Kode
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}- Kode ini adalah contoh penggunaan
FocusEventuntuk mendeteksi dan mencatat saat field input mendapatkan atau kehilangan fokus.
Pengetikan di TypeScript
Saat menggunakan TypeScript, pemeriksaan tipe dalam manipulasi DOM dan penanganan peristiwa ditingkatkan. Di bawah ini adalah contoh manipulasi DOM dan penanganan peristiwa yang aman tipe di TypeScript.
Pendengar Peristiwa Bertipe
Saat menambahkan pendengar peristiwa, menentukan tipe peristiwa melakukan pemeriksaan tipe dan mencegah akses ke properti yang salah.
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});- Kode ini adalah contoh penggunaan event listener bertipe untuk menangani event input serta memperoleh dan mencatat nilai saat ini dari field input secara aman.
Penanganan Peristiwa Generik
Dengan menggunakan generik di TypeScript, Anda dapat melakukan penanganan peristiwa generik yang mendukung berbagai jenis peristiwa.
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);- Kode ini adalah contoh penangan event generik menggunakan generik, yang mencatat tipe event dan nama tag dari elemen target.
Ringkasan
Di TypeScript, tipe diterapkan pada API DOM standar selama manipulasi DOM dan penanganan peristiwa, meningkatkan keamanan dan keterbacaan kode. Dengan memanfaatkan kelas seperti Document dan Element, serta kelas terkait peristiwa seperti Event, MouseEvent, dan KeyboardEvent, pengembangan yang aman tipe dapat dilakukan. Selain itu, penggunaan querySelector<T>() atau HTMLCollectionOf<T> memungkinkan manipulasi DOM yang aman terhadap tipe.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.