3.1 – EL DOM (DOCUMENT OBJECT MODEL)

1. ¿Qué es el DOM?

El DOM (Document Object Model) es la representación en forma de árbol de objetos que el navegador crea a partir del HTML.

El navegador no “lee HTML y ya”.
Lo convierte en objetos manipulables con JavaScript.

Ejemplo simple:

HTML:

<body>
  <h1>Hola</h1>
  <p>Texto</p>
</body>

El navegador lo convierte mentalmente en:

document
 └── body
     ├── h1
     │   └── "Hola"
     └── p
         └── "Texto"

Cada etiqueta es un nodo (node).
Cada nodo es un objeto JavaScript.

Eso significa que puedes:

  • Leerlo
  • Modificarlo
  • Crear nuevos nodos
  • Borrarlos
  • Moverlos

El DOM es, literalmente, la memoria viva del HTML.


2. El objeto document

El punto de entrada al DOM es:

document

Es el objeto raíz del árbol. Desde aquí puedes acceder a todo el HTML.

Ejemplo:

console.log(document.title);
console.log(document.body);

3. Seleccionar elementos del DOM

Antes de modificar algo, hay que localizar el nodo.

3.1 getElementById (el clásico)

HTML:

document.querySelector("#titulo");      // por id
document.querySelector(".clase");       // por clase
document.querySelector("h1");           // por etiqueta
document.querySelector("div p");        // descendiente

JS:

const titulo = document.getElementById("titulo");
console.log(titulo);

Devuelve un solo elemento.


3.2 querySelector (el más versátil)

Permite usar selectores CSS.

document.querySelector("#titulo");      // por id
document.querySelector(".clase");       // por clase
document.querySelector("h1");           // por etiqueta
document.querySelector("div p");        // descendiente

Devuelve el primer elemento que coincide.


3.3 querySelectorAll (varios elementos)

const items = document.querySelectorAll("li");
console.log(items);

Devuelve una NodeList (colección).

Se recorre así:

items.forEach(item => {
  console.log(item.textContent);
});

4. Leer y modificar contenido

4.1 textContent (forma segura)

const titulo = document.getElementById("titulo");
titulo.textContent = "Nuevo título";

Nunca ejecuta HTML. Solo texto.


4.2 innerHTML (usar con cuidado)

titulo.innerHTML = "<b>Hola</b>";

Inserta HTML real.
Peligroso si el contenido viene del usuario (XSS).

Regla:
Si solo es texto → textContent.


5. Manipular atributos

Leer atributo

const img = document.querySelector("img");
console.log(img.getAttribute("src"));

Modificar atributo

img.setAttribute("src", "nueva.jpg");

6. Manipular clases CSS

Añadir clase

elemento.classList.add("activo");

Quitar clase

elemento.classList.remove("activo");

Alternar

elemento.classList.toggle("activo");

7. Crear elementos (crear nodos)

Aquí empieza la verdadera manipulación del DOM.

Crear un elemento

const p = document.createElement("p");
p.textContent = "Soy nuevo en el DOM";

Todavía no está en la página.


8. Insertar elementos en el DOM

append (al final)

document.body.append(p);

prepend (al principio)

document.body.prepend(p);

append en otro nodo

const contenedor = document.getElementById("contenedor");
contenedor.append(p);

9. Eliminar elementos

p.remove();

10. Ejercicio guiado — Pintar lista desde un array

HTML:

<ulid="lista"></ul>

JS:

const datos = ["Manzana", "Pera", "Plátano", "Kiwi"];

const lista = document.getElementById("lista");

datos.forEach(fruta => {
  const li = document.createElement("li");
  li.textContent = fruta;
  lista.append(li);
});

Resultado: el DOM se construye dinámicamente.


11. Cómo piensa un programador al usar el DOM

El flujo mental correcto es:

  1. Selecciono el nodo contenedor
  2. Creo elementos nuevos
  3. Les pongo contenido
  4. Los inserto en el DOM

Es exactamente el mismo pensamiento que usarías manipulando objetos en Java.


12. Errores comunes

❌ Usar innerHTML para todo

Malo para seguridad y mantenimiento.

❌ Crear elementos sin insertarlos

Si no haces append/prepend → no aparecen.

❌ Duplicar IDs

Un ID debe ser único.

❌ Mezclar lógica y HTML sin orden

Primero datos, luego render.


13. Mini-reto

Crea una tabla HTML y, desde JavaScript, genera 5 filas con:

  • Nombre
  • Edad
  • Ciudad

Todo debe construirse con createElement.

Nada de escribir filas en el HTML.


14. Lo que debes haber aprendido

Al terminar este bloque debes poder:

  • Entender qué es el DOM
  • Seleccionar elementos
  • Modificar texto
  • Manipular atributos y clases
  • Crear elementos dinámicamente
  • Insertar y eliminar nodos
  • Construir HTML desde datos

Si esto está claro, en el siguiente bloque el cerebro da el salto natural:

JSON → JavaScript → DOM

Y ahí empieza el verdadero front conectado a tu backend JEE.

El DOM no es difícil. Solo es un árbol.
Y los árboles, curiosamente, se doman rama por rama. 🌿

puedes hacerme una tabla con los metodos o atributos que puedo sacar de cada elemento.

El DOM es como una criatura mitológica hecha de objetos. Cada elemento HTML hereda poderes de varias “clases ancestrales”: Node → Element → HTMLElement. Eso significa que casi todos los elementos comparten un mismo arsenal de propiedades y métodos. No memorizas etiquetas… entiendes la especie.

Aquí tienes la tabla de referencia esencial que usarás constantemente.


Métodos y atributos principales de un elemento DOM

TipoNombreQué haceEjemplo
📦 PropiedadidObtiene o cambia el id del elementoel.id = "nuevo"
📦 PropiedadclassNameClases CSS como stringel.className = "rojo grande"
📦 PropiedadclassListManejo avanzado de clasesel.classList.add("activo")
📦 PropiedadtextContentTexto interno (seguro)el.textContent = "Hola"
📦 PropiedadinnerHTMLHTML internoel.innerHTML = "<b>Hola</b>"
📦 PropiedadchildrenElementos hijosel.children.length
📦 PropiedadparentElementNodo padreel.parentElement
📦 PropiedadstyleEstilos inlineel.style.color = "red"
📦 PropiedadvalueValor (inputs, textarea)input.value
📦 PropiedadcheckedEstado checkbox/radiocheck.checked
📦 PropiedadsrcRuta de imagen/videoimg.src
📦 PropiedadhrefEnlacesa.href
📦 PropiedaddisabledHabilitar/deshabilitarbtn.disabled = true
📦 PropiedaddatasetAcceso a data-*el.dataset.id

Métodos de atributos

MétodoQué haceEjemplo
getAttribute(name)Lee atributoel.getAttribute("src")
setAttribute(name, value)Cambia atributoel.setAttribute("alt","img")
removeAttribute(name)Elimina atributoel.removeAttribute("disabled")
hasAttribute(name)Comprueba atributoel.hasAttribute("id")

Métodos de clases CSS

MétodoQué haceEjemplo
classList.add()Añade claseel.classList.add("rojo")
classList.remove()Quita claseel.classList.remove("rojo")
classList.toggle()Alterna claseel.classList.toggle("activo")
classList.contains()Comprueba claseel.classList.contains("rojo")

Métodos de creación y manipulación

MétodoQué haceEjemplo
createElement(tag)Crea nododocument.createElement("div")
append()Inserta al finalpadre.append(hijo)
prepend()Inserta al iniciopadre.prepend(hijo)
remove()Elimina nodoel.remove()
cloneNode(true)Clona nodoel.cloneNode(true)

Métodos de búsqueda dentro de un elemento

MétodoQué haceEjemplo
querySelector()Primer descendienteel.querySelector("p")
querySelectorAll()Todos los descendientesel.querySelectorAll("li")
getElementsByClassName()Por claseel.getElementsByClassName("x")
getElementsByTagName()Por etiquetael.getElementsByTagName("div")

Eventos (interacción)

MétodoQué haceEjemplo
addEventListener()Escucha eventobtn.addEventListener("click", fn)
removeEventListener()Quita eventobtn.removeEventListener("click", fn)

Eventos comunes:

  • click
  • input
  • change
  • submit
  • keydown
  • mouseover

PropiedadQué hace
parentElementPadre
childrenHijos elementos
firstElementChildPrimer hijo
lastElementChildÚltimo hijo
nextElementSiblingHermano siguiente
previousElementSiblingHermano anterior