12. Cómo conectar JavaScript con HTML
¿Que es el DOM (Document Object Model)?
El DOM es una representación del documento HTML como un grupo de nodos y objetos. Determinando así la forma en la cual se puede acceder y modificar la estructura, contenido y estilo de un documento HTML.
En palabras mas sencillas el DOM le dice a un programa como JavaScript que nodo o parte del HTML esta leyendo (como puede ser un párrafo o un titulo o una sección, etc.) y es el mismo DOM el que modela como un objeto (con sus propiedades y métodos) esa parte del documento. Con JS se accede a esas propiedades y se invoca esos métodos para modificar, eliminar, crear, etc. elementos en una pagina web.
Para ejecutar código de JavaScript en nuestro HTML usaremos la etiqueta script.
<script>
console.log("Hello, world");
</script>
- <script> Se utiliza para insertar o hacer referencia a un script ejecutable.
- src: Este atributo especifica la ruta del script externos.
Se puede utilizar para agregar scripts embebidos o separar tu código JavaScript y mantener un orden.
<script src="./main.js"></script>
Los script son interpretados y ejecutados inmediatamente antes de que el navegador procese la página, mientras no contengan el atributo async o defer.
Mas información: script
Leyendo HTML desde JavaScript
La forma profesional de leer Código HTML desde JavaScript es crear variables que representen a los selectores de cada uno de los elementos presentes en HTML a los cuales de desea acceder.
Una forma de acceder al código HTML desde JS es por medio de la función document.querySelector(), en el cual dentro de un string le indicamos cual es el selector al cual queremos acceder desde JS.
Para poder manipular un objeto del DOM, tenemos que “escucharlo”, o poder leerlo de alguna
manera:
- Entonces usamos document, que representa el DOM.
- Existen varios métodos para obtener acceder a un elemento(nodo) del árbol:
- getElementById(’id’): Obtenemos por id.
- querySelectorAll(’’): Obtenemos todos los elementos del tipo que hayamos seleccionado; clases, etiquetas.
- En este caso usamos el método querySelector(’’elemento’’), para decir en que nodo del árbol vamos a trabajar
- Cada uno de estos elementos tiene sus propias propiedades y métodos, con el fin de manipularlas
- Cada elemento que obtengamos tendrá muchas propiedades que podamos usar o manipular
Para leer y manipular el DOM usamos document
querySelector() - Obtener primer elemento usando selectores CSS.
const paragraph = document.querySelector('.paragraph');
querySelectorAll() - Lista todos lo elementos.
document.querySelectorAll('h3');
getElementById() - Elemento por id.
document.getElementById('dateOfBirthday');
getElementsByClassName() - Lista de elementos por clase.
document.getElementsByclassName('red box');
Escribiendo HTML desde JavaScript
Existen muchos atributos o propiedades, las cuales nos ayudan bastante para modificar o leer ese atributo o propiedad tenemos a:
-
Element.innerHTML() - La propiedad Element.innerHTML devuelve o establece la sintaxis HTML describiendo los descendientes del elemento.
const content = element.innerHTML; element.innerHTML = htmlString; -
Element.innerText() - La propiedad innerText representa el contenido de texto representado de un nodo y sus descendientes. Se diferencia de textContent ya que innerText es consciente de la apariencia renderizada del texto.
-
Element.getAttribute() - Devuelve el valor del atributo especificado en el elemento. Si el atributo especificado no existe, el valor retornado puede ser tanto null como "".
var atributo = element.getAttribute(nombreAtributo); -
Element.setAttribute() - Establece el valor de un atributo en el elemento indicado. Si el atributo ya existe, el valor es actualizado, en caso contrario, el nuevo atributo es añadido con el nombre y valor indicado.
Element.setAttribute(name, value); -
Element.classList
- classList.add() - Añade a las clases indicadas.
// <h1> Soy un título </h1> h1.classList.add("red"); // <h1 class="red"> Soy un título </h1>- classList.remove() - Elimina las clases indicadas
// <h1 class="red"> Soy un título </h1> h1.classList.remove("red"); // <h1> Soy un título </h1>- classList.toggle() - Alterna el valor de la clase si hay un argumento presente si la clase existe la elimina y devuelve false, si no, la añade y devuelve true.
// <h1 class="red> Hola </h1> let toggle = h1.classList.toggle("red"); console.log(toggle); // false // <h1> Hola </h1>- classList.contains() - Comprueba si la clase indicada existe.
// <h1 class="red"> Hola </h1> console.log(h1.classList.contains("red")); // true- classList.replace() - Reemplaza una clase existente por una nueva.
// <h1 class="red"> Hola </h1> h1.classList.replace("red", "blue"); // <h1 class="blue"> Hola </h1> -
Element.createElement() - En un documento HTML, el método Document.createElement() crea un elemento HTML especificado por su tagName.
var element = document.createElement(tagName);
append(), prepend() y appendChild()
- append() - Nos permite adjuntar un objeto nodo o un DOMString después del último elemento hijo del elemento padre.
- prepend() - Colocara el nodo o el DOMstring delante de cualquier elemento hijo dentro del elemento padre.
- appendChild() - Es parecido al método .append pero en este caso solo admitirá nodos, por lo que NO podremos usar DOMString.
Eventos en JavaScript: interactuando con usuarios
Un evento es una acción del usuario ante la cual puede realizarse algún proceso(por ejemplo, el cambio del valor de un formulario, o la pulsación de un enlace).
-
Escuchando un input - Podemos utilizar el atributo onchange en el input y pasarle una función que haga referencia a la función definida en tu script.
HTML
<input id="numero" onchange="showNumber()"/>JavaScript
const numero = document.querySelector("\#numero"); function showNumber() { console.log(numero) }Esto hará que cada vez que hagamos un cambio en el input y le quitemos el focus mostrará en consola lo que se escribió.
-
Escuchando un botón - Para escuchar un botón podemos hacer uso de el atributo onclick y pasarle una función como vimos anteriormente.
HTML
<button id="btn" onclick="btnOnclick()">Haga click</button>JavaScript
const btn = document.getElementById("btn"); function btnOnclick() { console.log("Hizo click"); }Entonces cada vez que haga click en el botón se mostrará ese texto en consola.
-
addEventListener() - registra un evento a un objeto en específico. El Objeto especifico puede ser un simple elemento en un archivo, el mismo documento, una ventana o un XMLHttpRequest.
target.addEventListener(tipo, listener[, useCapture]); -
Escuchar evento desde HTML - Para lograr esto podemos definir una propiedad al elemento que normalmente es el nombre del evento con el prefijo “on” y como valor le pasamos la función que ejecutará.
<button id="btnCalculo" onclick="console.log("Hice click!")">Calcular</button>También podríamos definir la función en un archivo script.
HTML
<button id="btnCalculo" onclick="btnOnclick()")>Calcular</button> <script src="script.js"></script>JavaScript
function btnOnclick() { console.log("Hice click"); } -
Escuchar un evento desde JavaScript - Escuchar un elemento desde JavaScript evita que nuestro html se vea desordenado y además es la forma que vas a encontrar mayormente en cualquier proyecto.
HTML
<button id="btn">Enviar</button>JavaScript
const btn = document.getElementById("btn"); btn.addEventListener("click", btnClick); function btnClick() { console.log("Hice click!"); } -
Escuchando evento desde un formulario - Cuando utilizamos un botón en un formulario por defecto este lo define de tipo submit y esto ocasiona que al realizar la acción la página se recarge. Para evitar esto y poder ver los cambios al escuchar el evento de click utilizaremos event.preventDefault().
HTML
<form id="form"> <button>Enviar</button> </form>JavaScript
const form = document.getElementById("form"); form.addEventListener("submit", btnClick); function btnClick(event) { event.preventDefault(); console.log("Hice click!"); }Otra forma de solucionar esto es especificarle explícitamente que nuestro botón no es un submit.
HTML
<form id="form"> <button id="btn" type="button">Calcular</button> </form>
Tipos de Eventos
Los atributos que podemos usar en el HTML para asociar manejadores de eventos tienen siempre el prefijo "on" seguido del nombre del evento. Por ejemplo, "onclick".
| Evento | Descripción |
|---|---|
| abort | Este evento se produce cuando un usuario detiene la carga de una imagen, ya sea porque detiene la carga de la página o porque realiza una acción que la detiene. |
| blur | Se desata cuando un elemento pierde el foco de la aplicación. |
| change | Se desata este evento cuando cambia el estado de un elemento de formulario, en ocasiones no se produce hasta que el usuario retira el foco del elemento. |
| click | Se produce cuando se da una pulsación o clic al botón del ratón sobre un elemento de la página. |
| dragdrop | Se produce cuando un usuario suelta algo que había arrastrado sobre la página web. |
| error | Se produce cuando no se puede cargar un documento o una imagen y esta queda rota. |
| focus | Se produce cuando un elemento de la página o la ventana ganan el foco de la aplicación. |
| keydown | Este evento se produce en el instante que un usuario presiona una tecla, independientemente que la suelte o no. Se produce en el momento de la pulsación. |
| keypress | Ocurre cuando el usuario deja pulsada una tecla un tiempo determinado. Antes de este evento se produce un onkeydown en el momento que se pulsa la tecla. |
| keyup | Se produce cuando el usuario deja de apretar una tecla. Se produce en el momento que se libera la tecla. |
| load | Este evento se desata cuando la página o las imágenes, han terminado de cargarse. js 1.0. |
| mousedown | Se produce el evento cuando el usuario pulsa sobre un elemento de la página. |
| mousemove | Se produce cuando el ratón se mueve por la página. |
| mouseout | Se desata cuando el puntero del ratón sale del área ocupada por un elemento de la página. |
| mouseover | Se desata cuando el puntero del ratón entra en el área ocupada por un elemento de la página. |
| mouseup | Este evento se produce en el momento que el usuario suelta el botón del ratón. |
| move | Evento que se ejecuta cuando se mueve la ventana del navegador, o un frame. |
| resize | Evento que se produce cuando se redimensiona la ventana del navegador, o el frame. |
| reset | Este evento está asociado a los formularios y se desata en el momento que un usuario hace clic en el botón de reset de un formulario. |
| select | Se ejecuta cuando un usuario realiza una selección de un elemento de un formulario. |
| submit | Ocurre cuando el visitante apreta sobre el botón enviar el formulario. Se ejecuta antes de envío propiamente dicho. |
| unload | Al abandonar una página, ya sea porque se pulse sobre un enlace que nos lleve a otra página o porque se cierre la ventana del navegador, se ejecuta el evento onunload |
| dblClick | Este evento es lanzado cuando el usuario hace doble click en un elemento de formulario o un link. |
| scroll | Este evento se produce cuando se realiza scroll o desplazamiento. Este desplazamiento se puede realizar en la página completa, pero también en elementos de la página que tengan sus propias zonas de scroll. |