Kelas Digunakan untuk Manipulasi DOM/Pengendalian Acara dalam TypeScript
Dalam artikel ini, kami akan menjelaskan kelas yang digunakan untuk manipulasi DOM/pengendalian acara dalam TypeScript.
Anda boleh belajar mengenai kelas Document, kelas Element dan NodeList, serta pelbagai kelas berkaitan acara melalui contoh kod.
YouTube Video
Kelas Digunakan untuk Manipulasi DOM/Pengendalian Acara dalam TypeScript
Untuk manipulasi DOM dan pengendalian acara dalam TypeScript, antara muka Document Object Model (DOM) digunakan secara utama. Dalam manipulasi DOM dan pengendalian acara, kelas dan antara muka JavaScript standard digunakan, tetapi dalam TypeScript, maklumat jenis ditambah kepada mereka, memungkinkan operasi yang lebih selamat.
Berikut adalah penerangan kelas dan antara muka yang biasa digunakan dalam manipulasi DOM dan pengendalian acara.
Kelas/Antara Muka Utama Digunakan untuk Manipulasi DOM
Document
Document ialah objek yang mewakili dokumen HTML atau XML. Digunakan untuk mengakses pokok DOM atau mencari elemen.
Contoh Kod
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});Kaedah Utama
getElementByIdmendapatkan elemen dengan atributidyang ditentukan.querySelectormendapatkan elemen menggunakan pemilih CSS.createElementmencipta elemen HTML baharu.
Penjelasan Kod
- Kod ini mendapatkan elemen dengan atribut
idmenggunakangetElementByIddan mengubah teksnya. Ia juga mendapatkan elemen butang menggunakanquerySelectordan menambah pendengar acara klik. Apabila diklik, ia mencipta elemendivbaru menggunakancreateElementdan menambahnya ke kandungan utama. Generik dan penegasan jenis digunakan untuk memastikan keselamatan jenis semasa operasi DOM.
Element
Element ialah antara muka yang mewakili elemen HTML individu dalam DOM. Ia paling kerap digunakan semasa memanipulasi DOM.
Contoh Kod
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}Harta dan Kaedah Utama
- Ciri
innerHTMLmembolehkan anda menetapkan atau mendapatkan kandungan HTML suatu elemen. - Ciri
textContentmembolehkan anda menetapkan atau mendapatkan kandungan teks bagi suatu elemen. classListialah sifat untuk mengendalikan kelas, membolehkan anda menambah, membuang dan menukar kelas.- Kaedah
setAttributemenetapkan atribut pada suatu elemen.
Penjelasan Kod
- Kod ini menunjukkan contoh menetapkan kandungan menggunakan
innerHTMLdantextContentuntuk elemen yang diperoleh denganquerySelector, menambah kelas denganclassList, dan menetapkan atribut tersuai dengansetAttribute. Operasi dijalankan secara selamat jenis menggunakan generik.
NodeList dan HTMLCollection
NodeList dan HTMLCollection mewakili koleksi yang mengandungi elemen DOM berganda. Sebagai contoh, querySelectorAll mengembalikan NodeList, dan getElementsByClassName mengembalikan HTMLCollection.
Contoh Kod
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});- Kod ini menunjukkan manipulasi terus
NodeListdenganforEach, dan menukarHTMLCollectionkepada tatasusunan untuk pengulangan.
Kelas/Antara Muka Utama Digunakan untuk Pengendalian Acara
Event
Event ialah kelas asas untuk semua acara yang berlaku dalam DOM. Pelbagai acara seperti klik, input, dan pemuatan halaman memperluaskan kelas Event.
Contoh Kod
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});Harta dan Kaedah Utama
- Ciri
targetmewakili elemen (EventTarget) di mana peristiwa berlaku. typemewakili jenis peristiwa yang berlaku, seperticlickatauinput.- Kaedah
preventDefaultmembatalkan tindakan lalai bagi peristiwa tersebut.
Penjelasan Kod
- Kod ini menunjukkan cara menambah pendengar acara
submitkepada borang.targetmerujuk kepada elemen borang di mana acara berlaku, dantypemenunjukkan jenis acara (dalam kes ini,"submit"). Dengan memanggil kaedahpreventDefault, anda boleh mematikan tingkah laku serahan borang lalai seperti navigasi halaman atau muat semula. Sebaliknya, proses khusus—iaitu log output—dijalankan di sini.
MouseEvent
MouseEvent mewakili acara yang berkaitan dengan operasi tetikus. Acara tetikus seperti click dan mousemove menggunakan kelas ini.
Contoh Kod
1const div = document.getElementById('clickArea');
2if (div) {
3 div.addEventListener('click', (event: MouseEvent) => {
4 console.log(`Clicked at: (${event.clientX}, ${event.clientY})`);
5 });
6}- Kod ini ialah contoh menggunakan
MouseEventuntuk merekod koordinat tetikus.
Ciri Utama
clientXialah koordinat X penunjuk tetikus dalam halaman.clientYialah koordinat Y penunjuk tetikus dalam halaman.buttonmenunjukkan butang tetikus yang ditekan.0ialah butang kiri,1ialah butang tengah, dan2ialah butang kanan.
KeyboardEvent
KeyboardEvent mewakili acara yang berkaitan dengan operasi papan kekunci. Acara keydown dan keyup termasuk dalam kategori ini.
Contoh Kod
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});Ciri Utama
keyialah nama kekunci yang ditekan, sepertiEnterataua.codeialah kod yang sepadan dengan kekunci pada papan kekunci.altKey,ctrlKey, danshiftKeyialah ciri-ciri yang menunjukkan sama ada kekunciAlt,Ctrl, atauShiftditekan.
Penjelasan Kod
- Kod ini menggunakan
KeyboardEventuntuk merekod nama kekunci yang ditekan (key), kod kekunci sepadan (code), serta sama ada kekunci pengubah suai (altKey,ctrlKey,shiftKey) ditekan. Ia juga menjalankan tindakan khas apabila kekunciEnterditekan.
FocusEvent
FocusEvent berkaitan dengan acara mendapatkan atau kehilangan fokus. Acara focus dan blur termasuk dalam kategori ini.
Contoh Kod
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}- Kod ini ialah contoh penggunaan
FocusEventuntuk mengesan dan merekod apabila medan input menerima atau kehilangan fokus.
Pengetikan dalam TypeScript
Apabila menggunakan TypeScript, semakan jenis dalam manipulasi DOM dan pengendalian acara diperbaiki. Berikut adalah contoh manipulasi DOM dan pengendalian acara yang selamat jenis dalam TypeScript.
Pendengar Acara Bertyp
Apabila menambah pendengar acara, menentukan jenis acara melakukan semakan jenis dan mengelakkan akses kepada sifat 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});- Kod ini ialah contoh penggunaan pendengar peristiwa menaip untuk mengendalikan peristiwa input serta mendapatkan dan merekod nilai semasa medan input dengan selamat.
Pengendalian Acara Generik
Dengan menggunakan generik dalam TypeScript, anda boleh melaksanakan pengendalian acara generik yang menyokong pelbagai jenis acara.
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);- Kod ini ialah contoh pengendali peristiwa generik menggunakan generik, yang merekod jenis peristiwa dan nama tag elemen sasaran.
Ringkasan
Dalam TypeScript, jenis diaplikasikan pada API DOM standard semasa manipulasi DOM dan pengendalian acara, meningkatkan keselamatan dan kebolehbacaan kod. Dengan menggunakan kelas seperti Document dan Element, serta kelas berkaitan acara seperti Event, MouseEvent, dan KeyboardEvent, pembangunan yang selamat jenis adalah mungkin. Selain itu, penggunaan querySelector<T>() atau HTMLCollectionOf<T> membolehkan manipulasi DOM yang selamat dari segi jenis.
Anda boleh mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Sila lihat juga saluran YouTube kami.