Volver a JavaScript Básico
Manipulación del DOM
El Document Object Model (DOM) es una representación en árbol de una página HTML. JavaScript te permite leerlo y modificarlo.
Seleccionar Elementos
// Por ID
const encabezado = document.getElementById("encabezado");
// Por selector CSS (primera coincidencia)
const btn = document.querySelector(".btn-primary");
// Todas las coincidencias
const items = document.querySelectorAll("ul > li");
// Navegar
const padre = btn.parentElement;
const hijos = padre.children;
const siguiente = btn.nextElementSibling;
Modificar Elementos
// Contenido
btn.textContent = "¡Haz clic!";
btn.innerHTML = "<strong>Texto en negrita</strong>"; // Cuidado con XSS
// Atributos
btn.setAttribute("disabled", true);
btn.removeAttribute("disabled");
btn.getAttribute("data-id"); // "42"
// Clases CSS
btn.classList.add("activo");
btn.classList.remove("desactivado");
btn.classList.toggle("visible");
btn.classList.contains("activo"); // true
// Estilos
btn.style.backgroundColor = "#3b82f6";
btn.style.display = "none";
Crear e Insertar Elementos
// Crear
const li = document.createElement("li");
li.textContent = "Nuevo elemento";
li.className = "item-lista";
// Insertar
const ul = document.querySelector("ul");
ul.appendChild(li); // Agregar al final
ul.prepend(li); // Agregar al inicio
ul.insertBefore(li, ul.firstChild);
// Métodos modernos de inserción
padre.insertAdjacentElement("beforeend", li);
padre.insertAdjacentHTML("beforeend", `<li>Elemento</li>`);
// Eliminar
li.remove();
Manejo de Eventos
const boton = document.querySelector("#btn-enviar");
// Agregar escuchador
function manejarClic(evento) {
evento.preventDefault(); // Prevenir envío de formulario / navegación
evento.stopPropagation(); // Detener propagación del evento
console.log("¡Clic!", evento.target);
}
boton.addEventListener("click", manejarClic);
// Eliminar escuchador
boton.removeEventListener("click", manejarClic);
// Eventos comunes
document.addEventListener("DOMContentLoaded", () => {
console.log("DOM listo");
});
window.addEventListener("resize", () => {
console.log(window.innerWidth);
});
Delegación de Eventos
// En lugar de adjuntar listeners a cada <li>, adjuntar al padre
const lista = document.querySelector("#lista-tareas");
lista.addEventListener("click", (evento) => {
const item = evento.target.closest("li");
if (!item) return;
item.classList.toggle("completado");
console.log("Alternado:", item.textContent);
});
API Fetch
async function cargarUsuarios() {
const response = await fetch("/api/usuarios");
const usuarios = await response.json();
const contenedor = document.querySelector("#usuarios");
contenedor.innerHTML = usuarios
.map(u => `<div class="usuario">${u.nombre}</div>`)
.join("");
}
document.querySelector("#btn-cargar").addEventListener("click", cargarUsuarios);
Nota de seguridad: Nunca uses
innerHTMLcon contenido generado por el usuario — siempre sanitiza primero o usatextContentpara prevenir ataques XSS.