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
getElementById
mengambil elemen dengan atributid
yang ditentukan.querySelector
mengambil elemen menggunakan selektor CSS.createElement
membuat elemen HTML baru.
Penjelasan Kode
- Kode ini mengambil elemen dengan atribut
id
menggunakangetElementById
dan mengubah teksnya. Kode ini juga mendapatkan elemen tombol menggunakanquerySelector
dan menambahkan pendengar event klik. Saat diklik, kode ini membuat elemendiv
baru menggunakancreateElement
dan 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
innerHTML
memungkinkan Anda untuk mengatur atau mengambil konten HTML dari sebuah elemen. - Properti
textContent
memungkinkan Anda untuk mengatur atau mengambil konten teks dari sebuah elemen. classList
adalah properti untuk memanipulasi kelas, memungkinkan Anda untuk menambah, menghapus, dan mengubah kelas.- Metode
setAttribute
menetapkan sebuah atribut pada elemen.
Penjelasan Kode
- Kode ini menunjukkan contoh mengatur konten menggunakan
innerHTML
dantextContent
untuk 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
NodeList
denganforEach
, dan mengubahHTMLCollection
menjadi 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
target
merepresentasikan elemen (EventTarget
) tempat event terjadi. type
merepresentasikan jenis event yang terjadi, seperticlick
atauinput
.- Metode
preventDefault
membatalkan aksi default dari event.
Penjelasan Kode
- Kode ini mendemonstrasikan cara menambahkan pendengar event
submit
ke sebuah formulir.target
mengacu pada elemen formulir tempat event terjadi, dantype
menunjukkan 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
MouseEvent
untuk mencatat koordinat mouse.
Properti Utama
clientX
adalah koordinat X dari pointer mouse di dalam halaman.clientY
adalah koordinat Y dari pointer mouse di dalam halaman.button
menunjukkan tombol mouse mana yang ditekan.0
adalah tombol kiri,1
adalah tombol tengah, dan2
adalah 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
key
adalah nama tombol yang ditekan, sepertiEnter
ataua
.code
adalah kode yang sesuai dengan tombol pada keyboard.altKey
,ctrlKey
, danshiftKey
adalah properti yang menunjukkan apakah tombolAlt
,Ctrl
, atauShift
ditekan.
Penjelasan Kode
- Kode ini menggunakan
KeyboardEvent
untuk 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 tombolEnter
ditekan.
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
FocusEvent
untuk 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.