document.¿Qué es el DOM?
El DOM (Document Object Model) es la representación viva de tu página HTML en memoria. Cuando el navegador carga un archivo HTML, lo convierte en un árbol de objetos JavaScript que podemos leer y modificar en tiempo real.
Sin el DOM, JavaScript no podría tocar nada visual. Con el DOM, tienes control total sobre cada elemento, atributo, texto y estilo de la página.
Práctica: Tu primer contacto con el DOM
La Estructura de Árbol
Cada elemento HTML se convierte en un nodo del árbol DOM. Los nodos tienen relaciones: padre, hijos y hermanos. Entender el árbol es fundamental para navegar y manipular la página.
document └── html ├── head │ └── title │ └── "Mi Página" ← Nodo de texto └── body ├── section class="hero" │ ├── h1 id="titulo" │ │ └── "Hola Mundo" │ └── p class="lead" │ └── "Texto aquí" └── ul id="lista" ├── li "Item 1" ← children[0] ├── li "Item 2" ← children[1] └── li "Item 3" ← children[2]
Navegar por el árbol
Seleccionar Elementos
Antes de modificar algo del DOM hay que encontrarlo. JavaScript ofrece varios métodos de selección, cada uno con propósito distinto:
null.HTMLCollection viva.NodeList.querySelector y querySelectorAll para la mayoría de los casos. Son los más flexibles y se comportan igual que CSS.Leer y Modificar Contenido
Una vez seleccionado un elemento, podemos leer y cambiar su contenido de texto, su HTML interno, sus atributos y el valor de formularios.
textContent siempre que puedas. Si necesitas insertar HTML real, usa innerHTML — pero nunca pongas ahí datos del usuario sin sanitizar (riesgo de XSS).Clases CSS y Estilos
La manera más limpia de cambiar la apariencia de un elemento es agregando o quitando clases CSS. Usa style solo para valores dinámicos que no puedes definir en CSS de antemano.
add(), remove(), toggle() (agrega si no existe, quita si existe), y contains() (devuelve true/false).Crear e Insertar Nodos
Una de las capacidades más poderosas del DOM es crear elementos desde cero con JavaScript y colocarlos exactamente donde necesitamos en el árbol.
true = copia también sus hijos.Eventos de Mouse
Los eventos de mouse cubren toda interacción del cursor: clics, movimiento, entrada y salida de elementos. El objeto MouseEvent trae propiedades como clientX/Y, offsetX/Y, button y buttons.
click, se disparan ambos.preventDefault() para evitar el menú del navegador.Eventos de Teclado
Hay tres eventos de teclado principales. keydown y keyup funcionan con cualquier tecla. input es el más confiable para capturar cambios en campos de texto.
Eventos de Formulario
Los formularios tienen su propio set de eventos. El más importante es submit, que se dispara al enviar. focus y blur controlan cuándo un campo gana o pierde el foco.
e.preventDefault() para manejarlo con JS.form.reset()).Eventos de Scroll y Resize
scroll se dispara cada vez que el usuario desplaza la página o un elemento. resize se dispara cuando cambia el tamaño de la ventana. Ambos pueden dispararse cientos de veces por segundo — usa throttle para controlar el rendimiento.
window o en cualquier elemento con overflow: auto/scroll. Usa scrollY para la posición.window. Usa window.innerWidth/innerHeight para las dimensiones.Drag & Drop
La API de Drag & Drop nativa del DOM permite arrastrar y soltar elementos entre zonas. El atributo HTML draggable="true" activa el comportamiento, y el objeto DataTransfer transfiere datos entre el elemento arrastrado y la zona de destino.
dataTransfer.preventDefault() para permitir el drop.dataTransfer.getData().setData(tipo, valor) guarda, getData(tipo) recupera.Delegación de Eventos
La delegación es una técnica que aprovecha el event bubbling: los eventos suben del hijo al padre. En vez de poner un listener en cada elemento, pones uno solo en el padre y usas event.target para saber quién disparó el evento.
event.target.closest(selector) para encontrar el elemento contenedor correcto aunque el usuario haya hecho clic en un elemento hijo anidado.Proyecto: Gestor de Tareas Completo
Este ejemplo integra todos los conceptos: selección, creación de nodos, manipulación de clases, atributos personalizados, eventos, delegación, y formularios. Lee cada parte del JS con calma — está comentado para que entiendas cada operación del DOM.
querySelectorAll y classList.toggle.