Klasser brukt for DOM-manipulering/hendelseshåndtering i TypeScript
I denne artikkelen vil vi forklare hvilke klasser som brukes for DOM-manipulering/hendelseshåndtering i TypeScript.
Du kan lære om Document
-klassen, Element
- og NodeList
-klassene, samt ulike hendelsesrelaterte klasser gjennom kodeeksempler.
YouTube Video
Klasser brukt for DOM-manipulering/hendelseshåndtering i TypeScript
For DOM-manipulering og hendelseshåndtering i TypeScript brukes i hovedsak Document Object Model
(DOM)-grensesnittene. Ved DOM-manipulering og hendelseshåndtering brukes standard JavaScript-klasser og -grensesnitt, men i TypeScript legges typeinformasjon til for å muliggjøre tryggere operasjoner.
Følgende beskriver klasser og grensesnitt som ofte brukes ved DOM-manipulering og hendelseshåndtering.
Hovedklasser/grensesnitt brukt for DOM-manipulering
Document
Document
er et objekt som representerer HTML- eller XML-dokumenter. Brukes for å få tilgang til DOM-treet eller søke etter elementer.
Kodeeksempel
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});
Hovedmetoder
getElementById
henter et element med den angitteid
-attributten.querySelector
henter et element ved å bruke en CSS-velger.createElement
lager et nytt HTML-element.
Kodeforklaring
- Denne koden henter et element med en
id
-attributt ved å brukegetElementById
og endrer teksten i det. Den henter også et knappeelement medquerySelector
og legger til en klikkerhendelseslytter. Ved klikk oppretter den et nyttdiv
-element medcreateElement
og legger det til hovedinnholdet. Generiske typer og typeantakelser brukes for å sikre typesikkerhet under DOM-operasjoner.
Element
Element
er et grensesnitt som representerer individuelle HTML-elementer i DOM-en. Det brukes oftest ved manipulering av DOM-en.
Kodeeksempel
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}
Hovedegenskaper og -metoder
innerHTML
-egenskapen lar deg sette eller hente HTML-innholdet til et element.textContent
-egenskapen lar deg sette eller hente tekstinnholdet til et element.classList
er en egenskap for å manipulere klasser, som lar deg legge til, fjerne og veksle klasser.setAttribute
-metoden setter et attributt på et element.
Kodeforklaring
- Denne koden viser et eksempel på hvordan man setter innhold med
innerHTML
ogtextContent
for elementer som hentes medquerySelector
, legger til klasser medclassList
, og angir egendefinerte attributter medsetAttribute
. Operasjoner utføres på en typesikker måte ved bruk av generiske typer.
NodeList
og HTMLCollection
NodeList
og HTMLCollection
representerer samlinger som inneholder flere DOM-elementer. For eksempel returnerer querySelectorAll
en NodeList
, og getElementsByClassName
returnerer en HTMLCollection
.
Kodeeksempel
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});
- Denne koden viser hvordan man kan manipulere en
NodeList
direkte medforEach
, og konvertere enHTMLCollection
til et array for iterasjon.
Hovedklasser/grensesnitt brukt for hendelseshåndtering
Event
Event
er basisklassen for alle hendelser som oppstår i DOM-en. Ulike hendelser som klikk, input og lasting av sider utvider Event
-klassen.
Kodeeksempel
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});
Hovedegenskaper og -metoder
target
-egenskapen representerer elementet (EventTarget
) som hendelsen skjedde på.type
representerer typen hendelse som fant sted, for eksempelclick
ellerinput
.preventDefault
-metoden avbryter standardhandlingen for hendelsen.
Kodeforklaring
- Denne koden viser hvordan man legger til en
submit
-hendelseslytter til et skjema.target
refererer til skjemaelementet hvor hendelsen skjedde, ogtype
indikerer hendelsestypen (i dette tilfellet,"submit"
). Ved å kallepreventDefault
-metoden kan du deaktivere standard oppførsler for skjemaer som side-navigasjon eller omlasting. I stedet blir en egendefinert prosess—logging av utskrift—utført her.
MouseEvent
MouseEvent
representerer hendelser relatert til museoperasjoner. Musehendelser som click
og mousemove
bruker denne klassen.
Kodeeksempel
1const div = document.getElementById('clickArea');
2if (div) {
3 div.addEventListener('click', (event: MouseEvent) => {
4 console.log(`Clicked at: (${event.clientX}, ${event.clientY})`);
5 });
6}
- Denne koden er et eksempel på å bruke
MouseEvent
for å logge musekoordinater.
Hovedegenskaper
clientX
er X-koordinatet til musepekeren på siden.clientY
er Y-koordinatet til musepekeren på siden.button
angir hvilken museknapp som ble trykket.0
er venstre knapp,1
er midtre knapp, og2
er høyre knapp.
KeyboardEvent
KeyboardEvent
representerer hendelser relatert til tastaturopasjoner. keydown
- og keyup
-hendelser tilhører denne kategorien.
Kodeeksempel
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});
Hovedegenskaper
key
er navnet på den trykkede tasten, for eksempelEnter
ellera
.code
er koden som tilsvarer en tast på tastaturet.altKey
,ctrlKey
ogshiftKey
er egenskaper som angir omAlt
,Ctrl
ellerShift
-tasten ble trykket.
Kodeforklaring
- Denne koden bruker
KeyboardEvent
for å logge navnet på den trykkede tasten (key
), dens tilhørende tastekode (code
), samt om modifiseringstaster (altKey
,ctrlKey
,shiftKey
) ble trykket. Den utfører også en spesiell handling nårEnter
-tasten trykkes.
FocusEvent
FocusEvent
omhandler hendelser knyttet til tap eller oppnåelse av fokus. focus
- og blur
-hendelser tilhører denne kategorien.
Kodeeksempel
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}
- Denne koden er et eksempel på å bruke
FocusEvent
for å oppdage og logge når et input-felt får eller mister fokus.
Bruk av typer i TypeScript
Ved bruk av TypeScript forbedres typekontroll ved DOM-manipulering og hendelseshåndtering. Nedenfor er eksempler på typesikker DOM-manipulering og hendelseshåndtering i TypeScript.
Typede hendelseslytterfunksjoner
Når man legger til hendelseslyttere, utfører angivelse av hendelsestypen typekontroll og hindrer tilgang til feil egenskaper.
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});
- Denne koden er et eksempel på å bruke en typet hendelseslytter for å håndtere input-hendelser og trygt hente og logge gjeldende verdi i et input-felt.
Generell hendelseshåndtering
Ved bruk av generics i TypeScript kan du utføre generell hendelseshåndtering som støtter ulike typer hendelser.
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);
- Denne koden er et eksempel på en generell hendelseshåndterer med bruk av generiske typer, som logger hendelsestypen og taggnavnet til målelementet.
Sammendrag
I TypeScript brukes typer på standard DOM-API-er under DOM-manipulering og hendelseshåndtering, noe som forbedrer kodekvalitet og lesbarhet. Ved å bruke klasser som Document
og Element
, samt hendelsesrelaterte klasser som Event
, MouseEvent
og KeyboardEvent
, er typesikker utvikling mulig. I tillegg gir bruk av querySelector<T>()
eller HTMLCollectionOf<T>
mulighet for typesikre DOM-manipuleringer.
Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.