Clases utilizadas para la manipulación del DOM y el manejo de eventos en TypeScript
En este artículo, explicaremos las clases utilizadas para la manipulación del DOM y el manejo de eventos en TypeScript.
Puedes aprender sobre la clase Document, las clases Element y NodeList, y varias clases relacionadas con eventos a través de ejemplos de código.
YouTube Video
Clases utilizadas para la manipulación del DOM y el manejo de eventos en TypeScript
Para la manipulación del DOM y el manejo de eventos en TypeScript, se utilizan principalmente las interfaces del Modelo de Objeto de Documento (DOM). En la manipulación del DOM y el manejo de eventos, se utilizan clases e interfaces estándar de JavaScript, pero en TypeScript, se les agrega información de tipos, lo que permite una operación más segura.
A continuación, se describen las clases e interfaces comúnmente utilizadas en la manipulación del DOM y el manejo de eventos.
Clases/Interfaces principales utilizadas para la manipulación del DOM
Document
Document es un objeto que representa documentos HTML o XML. Se utiliza para acceder al árbol del DOM o buscar elementos.
Ejemplo de código
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});Métodos Principales
getElementByIdrecupera un elemento con el atributoidespecificado.querySelectorrecupera un elemento utilizando un selector CSS.createElementcrea un nuevo elemento HTML.
Explicación del código
- Este código obtiene un elemento con un atributo
idusandogetElementByIdy cambia su texto. También obtiene un elemento de botón usandoquerySelectory añade un escuchador de evento de clic. Al hacer clic, crea un nuevo elementodivusandocreateElementy lo añade al contenido principal. Se usan genéricos y aserciones de tipo para garantizar la seguridad de tipo durante las operaciones del DOM.
Element
Element es una interfaz que representa elementos HTML individuales en el DOM. Es la más utilizada al manipular el DOM.
Ejemplo de código
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}Propiedades y métodos principales
- La propiedad
innerHTMLte permite establecer u obtener el contenido HTML de un elemento. - La propiedad
textContentte permite establecer u obtener el contenido de texto de un elemento. classListes una propiedad para manipular clases, que te permite agregar, eliminar y alternar clases.- El método
setAttributeestablece un atributo en un elemento.
Explicación del código
- Este código muestra un ejemplo de cómo establecer contenido usando
innerHTMLytextContentpara elementos obtenidos conquerySelector, añadir clases conclassListy establecer atributos personalizados consetAttribute. Las operaciones se realizan de manera segura en cuanto a tipos usando genéricos.
NodeList y HTMLCollection
NodeList y HTMLCollection representan colecciones que contienen múltiples elementos del DOM. Por ejemplo, querySelectorAll devuelve un NodeList, y getElementsByClassName devuelve un HTMLCollection.
Ejemplo de código
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});- Este código demuestra cómo manipular directamente un
NodeListconforEach, y cómo convertir unHTMLCollectionen un array para su iteración.
Clases/Interfaces principales utilizadas para el manejo de eventos
Event
Event es la clase base para todos los eventos que ocurren en el DOM. Diversos eventos como clics, entradas y cargas de página extienden la clase Event.
Ejemplo de código
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});Propiedades y métodos principales
- La propiedad
targetrepresenta el elemento (EventTarget) en el que ocurrió el evento. typerepresenta el tipo de evento que ocurrió, comoclickoinput.- El método
preventDefaultcancela la acción predeterminada del evento.
Explicación del código
- Este código demuestra cómo añadir un escuchador de evento
submita un formulario.targetse refiere al elemento formulario donde ocurrió el evento, ytypeindica el tipo de evento (en este caso,"submit"). Al llamar al métodopreventDefault, puedes desactivar comportamientos predeterminados del envío de formularios como la navegación o recarga de la página. En su lugar, aquí se ejecuta un proceso personalizado, en este caso registrar una salida.
MouseEvent
MouseEvent representa eventos relacionados con operaciones del ratón. Los eventos del ratón como click y mousemove utilizan esta clase.
Ejemplo de código
1const div = document.getElementById('clickArea');
2if (div) {
3 div.addEventListener('click', (event: MouseEvent) => {
4 console.log(`Clicked at: (${event.clientX}, ${event.clientY})`);
5 });
6}- Este código es un ejemplo de cómo usar
MouseEventpara registrar las coordenadas del ratón.
Propiedades Principales
clientXes la coordenada X del puntero del ratón dentro de la página.clientYes la coordenada Y del puntero del ratón dentro de la página.buttonindica qué botón del ratón fue presionado.0es el botón izquierdo,1es el botón central y2es el botón derecho.
KeyboardEvent
KeyboardEvent representa eventos relacionados con operaciones del teclado. Los eventos keydown y keyup pertenecen a esta categoría.
Ejemplo de código
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});Propiedades Principales
keyes el nombre de la tecla presionada, comoEnteroa.codees el código correspondiente a una tecla del teclado.altKey,ctrlKeyyshiftKeyson propiedades que indican si se presionó la teclaAlt,CtrloShift.
Explicación del código
- Este código usa
KeyboardEventpara registrar el nombre de la tecla pulsada (key), su código correspondiente (code), así como si se pulsaron teclas modificadoras (altKey,ctrlKey,shiftKey). También realiza una acción especial cuando se pulsa la teclaEnter.
FocusEvent
FocusEvent se relaciona con eventos de obtener o perder el foco. Los eventos focus y blur pertenecen a esta categoría.
Ejemplo de código
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}- Este código es un ejemplo de cómo usar
FocusEventpara detectar y registrar cuándo un campo de entrada obtiene o pierde el enfoque.
Escribiendo en TypeScript
Cuando se usa TypeScript, la verificación de tipos en la manipulación del DOM y el manejo de eventos se mejora. A continuación se muestran ejemplos de manipulación del DOM y manejo de eventos con tipos seguros en TypeScript.
Listeners de Eventos Tipados
Al agregar listeners de eventos, especificar el tipo de evento realiza la verificación de tipos y previene el acceso a propiedades incorrectas.
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});- Este código es un ejemplo de cómo usar un listener de eventos tipado para manejar eventos de entrada y obtener y registrar de forma segura el valor actual de un campo de entrada.
Manejo Genérico de Eventos
Con generics en TypeScript, puedes manejar eventos genéricos que soporten varios tipos de eventos.
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);- Este código es un ejemplo de un manejador de eventos genérico usando genéricos, que registra el tipo de evento y el nombre de la etiqueta del elemento objetivo.
Resumen
En TypeScript, los tipos se aplican a las API estándar del DOM durante la manipulación del DOM y el manejo de eventos, mejorando la seguridad y legibilidad del código. Al utilizar clases como Document y Element, y clases relacionadas con eventos como Event, MouseEvent y KeyboardEvent, es posible un desarrollo con tipos seguros. Además, usar querySelector<T>() o HTMLCollectionOf<T> permite manipulaciones del DOM seguras respecto a tipos.
Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.