Manipulación del DOM
Introducción
JavaScript permite modificar el DOM (Modelo de Objetos del Documento HTML) de muchas formas, desde agregar y eliminar elementos al documento, modificar los atributos de elementos existentes (incluyendo las clases y estilos del mismo) y agregar funciones que reaccionan ante eventos del usuario.
! Cada elemento del DOM se conoce como Nodo, entre los cuales se distinguen los nodos de elemento (div, p, h1, etc…) y los nodos de texto (directamente el texto)
Understanding Document Object Model in JavaScript
Seleccionar Elementos
Para que Js pueda modificar elementos de DOM debe seleccionarlos primero usando uno de las siguientes funciones del objeto document:
1 | document.getElementById() // Selecciona un elemento por su **id** |
Usualmente la forma más directa de seleccionar un elemento es por medio de la función document.getElementById('')
ya que los id son únicos e irrepetibles dentro de un documento, mientras que el resto de funciones nos devuelven una lista de todos los elementos que coincidan con la selección.
1 | <section id="banner" class="banner-container bg-dark"> |
1 | let banner = document.getElementById('banner') |
JavaScript getElementById() - Selecting an Element By Id
Modificar Elementos
Cuando seleccionamos un elemento de HTML creamos un objeto de JS, donde los atributos HTML del elemento se pueden acceder a traves de propiedades.
1 | <img id="perfil" class="user-foto flotante" src="images/user.jpg" |
1 | let fotoUsuario = document.getElementById('perfil'); |
Modificar los atributos de un elemento se puede realizar asignando un nuevo valor al atributo que se desea cambiar:
1 | fotoUsuario.src = 'images/userProfile2.jpg'; |
Modificar el contenido
Si se desea modificar el texto contenido de un elemento se puede usar la propiedad textContent
1 | <p id="parrafo"> |
1 | let parr = document.getElementById('parrafo'); |
JavaScript textContent: Getting or Setting Text for a Node
Modificando Estilos
Js también puede modificar los estilos de un elemento accediendo y modificando el valor del atributo style, de esta forma se agregan estilos en linea al elemento:
1 | fotoUsuario.style.width = '500px'; // width: 500px; |
Sin embargo, la notación de cada propiedad cambia, dado que js no acepta el guion (-
) en sus nombres, las propiedades se re nombran:
1 | fotoUsuario.style.borderRadius = '15px'; // border-radius: 15px; |
Modificando Clases
Por medio de Js se pueden agregar y eliminar clases de css a un elemento, por lo que permite una mejor manipulación de estilos, dejando la responsabilidad de éstos a css.
Para manipular las clases de los elementos se debe acceder a la propiedad classList de un elemento, con la cuál podemos usar las siguientes funciones:
1 | let navbar = document.getElementById('navbar'); |
JavaScript classList: Manipulating CSS properties of an Element
Ocultando Elementos
Usando JS también se pueden ocultar y mostrar elementos cambiando el valor de la propiedad hidden entre true
(oculto) y false
(visible)
1 | navbar.hidden = true; |
Un elemento con el atributo hidden
(en true) es similar a tener una clase con
display: none;
Eventos
Un evento es una acción que ocurre en el navegador web, ya sea por la interacción del usuario o por algún otro evento externo a la página.
Cada evento puede tener un controlador de eventos (event handler), el cuál consiste en una función que se ejecutará cuando ocurra el evento.
1 | <button type="button" id="modo-nocturno">Activar Modo Nocturno<button> |
1 | // 1. Se selecciona el elemento al cuál se agregará el *event handler* |
1 | // Otra forma de obtener el mismo resultado con menos lineas de código |
Understanding JavaScript Events
Tipos de Eventos
HTML y JS utilizan un gran conjunto de eventos para agregar interacción a una página web, entre los diferentes eventos que existen podemos encontrar:
document
load
: es el evento principal, ocurre cuando una página termina de cargar.scroll
: cuando se realiza un scroll en el documento (u otro elemento)
Mouse:
mousedown
: cuando el usuario hace click (antes de soltarlo)mouseup
: cuando el usuario suelta el clickclick
: cuando el usuario hace click (ocurre después de soltarse)dblclick
: cuando el usuario hace dobleclickcontextmenu
: cuando se hace click derecho (antes de desplegar el menú)Movimiento del Mouse:
mouseover
: cuando el usuario mueve el mouse hacia adentro de un elementomouseomove
: cuando el usuario mueve el mouse sobre el elemento (se ejecuta continuamente mientras el mouse esté moviendose)mouseoout
: cuando el usuario mueve el mouse hacia afuera de un elemento
Teclado (usualmente asociados a inputs)
keydown
: cuando se apreta una teclakeyup
: cuando se apreta una tecla y se sueltakeypress
: cuando se mantiene apretada una tecla
Texto:
copy
: cuando el usuario copia un textocut
: cuando el usuario corta un textopaste
: cuando el usuario pega un texto (usualmente inputs)
Inputs:
focus
: cuando un input está seleccionado para escribir (se ejecuta continuamente mientras esté seleccionado)input
: cada vez que el usuario ingresa datos a un inputselect
: cuando el usuario selecciona un texto (en inputs)change
: cuando el usuario ingresa cambia un valor de un inputblur
: cuando un input está seleccionado para escribir y se deselecciona
Formularios:
submit
: Cuando se envía un formulario (antes de enviar los datos)reset
: cuando se reinicia un formulario.
Cancelar un evento
Para cancelar un eventoc por defecto, como el submit
de un formulario, se puede usar la función preventDefault()
del evento de la siguiente forma
1 | function cancelEvent(event) { |