# Javascript DOM
es.javascript.info (opens new window)
# Document
La interfaz Document representa cualquier página web cargada en el navegador y sirve como punto de entrada al contenido de la página web, que es el árbol DOM (Document Object Model).
# Elementos
# Creación
document.createElement(tag);
Crea un nuevo nodo elemento con la etiqueta HTML dada.
Ejemplo
let div = document.createElement('div');
document.createTextNode(text);
Crea un nuevo nodo texto con el texto dado:
let textNode = document.createTextNode('Aquí estoy');
La mayoría de las veces se necesitan crear nodos de elemento, como el div
para el mensaje.
# Creando el mensaje
Crear el div de mensaje toma 3 pasos:
// 1. Crear elemento <div>
let div = document.createElement('div');
// 2. Establecer su clase a "alert"
div.className = 'alert';
// 3. Agregar el contenido
div.innerHTML = '<strong>¡Hola!</strong> Usted ha leído un importante mensaje.';
# Inserción
El método appendChild()
agrega un nodo al final de la lista de hijos de un nodo padre especificado.
node.appendChild(aChild);
Ejemplo
// Create a new paragraph element, and append it to the end of the document body
let p = document.createElement('p');
document.body.appendChild(p);
# Eliminación
node.remove();
Ejemplo
<style>
.alert {
padding: 15px;
border: 1px solid #d6e9c6;
border-radius: 4px;
color: #3c763d;
background-color: #dff0d8;
}
</style>
<script>
let div = document.createElement('div');
div.className = 'alert';
div.innerHTML =
'<strong>¡Hola!</strong> Usted ha leído un importante mensaje.';
document.body.append(div);
setTimeout(() => div.remove(), 1000);
</script>
# Selección
# document.querySelector()
Devuelve el primer elemento del documento que coincide con el grupo especificado de selectores.
Sintaxis
element = document.querySelector(selectores);
- Selector de tipo
- Selector de clase
- Selector de id
- Selector de atributos
# document.querySelectorAll()
Devuelve una lista de los elementos del documento que coinciden con el grupo especificado de selectores.
Sintaxis
elements = document.querySelectorAll(selectores);
# Eventos
Un evento es una señal de que algo ocurrió. Todos los nodos del DOM generan dichas señales (pero los eventos no est{an limitados sólo al DOM).
Aquí hay una lista con los eventos del DOM más utilizados, solo para echar un vistazo:
# Eventos del mouse:
click
– cuando el mouse hace click sobre un elemento (los dispositivos touch lo generan con un toque).contextmenu
– cuando el mouse hace click derecho sobre un elemento.mouseover
/mouseout
– cuando el cursor del mouse ingresa/abandona un elemento.mousedown
/mouseup
– cuando el botón del mouse es presionado/soltado sobre un elemento.mousemove
– cuando el mouse se mueve.
# Eventos del teclado:
keydown
/keyup
– cuando se presiona/suelta una tecla.
# Eventos del elemento form:
submit
– cuando el visitante envía un<form>
.focus
– cuando el visitante se centra sobre un elemento, por ejemplo un<input>
.
# Eventos del documento:
DOMContentLoaded
--cuando el HTML es cargado y procesado, el DOM está completamente construido
# Eventos del CSS:
transitionend
– cuando una animación CSS concluye.
# Controladores de eventos
Para reaccionar con eventos podemos asignar un handler (controlador) el cual es una función que se ejecuta en caso de un evento.
Los handlers son una forma de ejecutar código JavaScript en caso de acciones por parte del usuario.
# Atributo HTML
Un handler puede ser establecido en el HTML con un atributo llamado on<event>
.
Por ejemplo, para asignar un handler click para un input
podemos usar onclick
, como aquí:
<input value="Click me" onclick="alert('Click!')" type="button" />
Al hacer click, el código dentro de onclick
se ejecuta.
# Propiedad del DOM
Podemos asignar un handler usando una propiedad del DOM on<event>
.
Por ejemplo, elem.onclick:
<input id="elem" type="button" value="Haz click en mí" />
<script>
elem.onclick = function () {
alert('¡Gracias!');
};
</script>
# addEventListener()
El problema fundamental de las formas ya mencionadas para asignar handlers es que no podemos asignar multiples handlers a un solo evento.
Digamos que una parte de nuestro código quiere resaltar un botón al hacer click, y otra quiere mostrar un mensaje en el mismo click.
Asignar dos handlers de eventos iguales, la segunda sobrescribirá la que ya existe:
input.onclick = function () {
alert(1);
};
// ...
input.onclick = function () {
alert(2);
}; // reemplaza el handler anterior handler
Una forma alternativa de administrar los handlers es utilizando el método addEventListener
.
La sintaxis para agregar un handler:
element.addEventListener(event, handler, [options]);
Ejemplo
<input id="elem" type="button" value="Haz click en mí" />
<script>
function handler1() {
alert('¡Gracias!');
}
function handler2() {
alert('¡Gracias de nuevo!');
}
elem.onclick = () => alert('Hola');
elem.addEventListener('click', handler1); // Gracias!
elem.addEventListener('click', handler2); // Gracias de nuevo!
</script>
# Acciones predeterminadas del navegador
Muchos eventos conducen automáticamente a determinadas acciones realizadas por el navegador.
Por ejemplo:
- Un clic en un enlace: inicia la navegación a su URL.
- Un clic en el botón de envío de un formulario inicia su envío al servidor.
- Al presionar un botón del ratón sobre un texto y moverlo, se selecciona el texto.
Si manejamos un evento en JavaScript, es posible que no queramos que suceda la acción correspondiente del navegador e implementar en cambio otro comportamiento.
# Evitar las acciones del navegador
Hay dos formas de decirle al navegador que no queremos que actúe:
- La forma principal es utilizar el objeto event. Hay un método
event.preventDefault()
. - Si el controlador se asigna usando
on<event>
(no poraddEventListener
), entonces devolverfalse
también funciona igual.
En este HTML, un clic en un enlace no conduce a la navegación. El navegador no hace nada:
<a href="/" onclick="return false">Haz clic aquí</a>
<a href="/" onclick="event.preventDefault()">aquí</a>