Cambiar el HTML
Un vale de ferry ya está en la página: el barco se llama Gull, la hora es 09:10 y la nota dice Boarding. Cambiar el HTML es escribir contenido nuevo en un elemento que ya tienes. boat.textContent = "Heron" guarda las palabras Heron. note.textContent = "<em>Late</em>" muestra esos caracteres, y note.querySelector("em") es null. note.innerHTML = "<em>Late</em>" construye un em cuyo texto es Late. Después, note.textContent es Late, mientras note.innerHTML sigue llevando las etiquetas. Una segunda escritura, note.innerHTML = "Dock 2", borra el em. note.insertAdjacentHTML("beforeend", " <span>gate B</span>") conserva Dock 2 y añade gate B, así que la nota dice Dock 2 gate B. Nada asigna la hora, así que sigue en 09:10.
Escribir, no buscar otra vez
La página anterior comparó formas de encontrar un nodo. Esta no cuenta una colección, no lee un índice y no recorre parentElement. getElementById solo te da el vale. La lección es el valor que asignas.
Qué deja cada escritura en la nota
La nota empieza como Boarding. Lee las filas en orden. Cada asignación sustituye la nota o la alarga.
📊 Qué deja cada escritura en la nota
| Escritura | Qué ves | Qué queda | Confusión fácil |
|---|---|---|---|
textContent = "Heron" en el barco |
Heron | un nodo de texto | un elemento llamado Heron |
textContent = "<em>Late</em>" |
los caracteres <em>Late</em> |
ningún elemento em |
un em de verdad |
innerHTML = "<em>Late</em>" |
Late | un em |
esperar las etiquetas en textContent |
innerHTML = "Dock 2" |
Dock 2 | el em ya no está |
el em junto a Dock 2 |
insertAdjacentHTML("beforeend", " <span>gate B</span>") |
Dock 2 gate B | Dock 2 más un span |
innerHTML, que tira Dock 2 |
textContent guarda una cadena y no interpreta etiquetas. innerHTML interpreta etiquetas y tira cada hijo que el elemento ya tenía. insertAdjacentHTML también interpreta etiquetas, pero beforeend coloca los nodos nuevos después del contenido actual. El nombre de un barco escrito en ventanilla va en textContent. La misma cadena en innerHTML trataría un signo menor-que como marcado.
Lee el vale antes de escribir
El archivo abre con tres valores. Todavía no hay ninguna asignación.
console.log(document.getElementById("boat").textContent);
console.log(document.getElementById("when").textContent);
console.log(document.getElementById("note").textContent);
Los registros son Gull, 09:10 y Boarding. La hora es un párrafo aparte. Las escrituras posteriores no tocan when.
Las palabras siguen siendo palabras
textContent sustituye cada hijo por un nodo de texto. Los caracteres que parecen una etiqueta siguen siendo caracteres.
let boat = document.getElementById("boat");
let note = document.getElementById("note");
boat.textContent = "Heron";
note.textContent = "<em>Late</em>";
console.log(boat.textContent);
console.log(note.textContent);
console.log(note.querySelector("em"));
La primera línea es Heron. La segunda son los caracteres <em>Late</em>. La tercera es null. La nota muestra la etiqueta como texto y no ha creado un elemento.
innerHTML construye el elemento
Pasa esos mismos caracteres a innerHTML. El analizador los convierte en nodos y sustituye lo que había en la nota.
let note = document.getElementById("note");
note.innerHTML = "<em>Late</em>";
console.log(note.textContent);
console.log(note.innerHTML);
console.log(note.querySelector("em") === null);
La primera línea es Late. La segunda es <em>Late</em>, porque innerHTML devuelve el marcado, etiquetas incluidas. La tercera es false: el em está, así que no es null. Las palabras visibles y la cadena de marcado son dos lecturas del mismo elemento.
El siguiente innerHTML borra el em
Un valor nuevo de innerHTML sustituye toda la nota. El em no se queda al lado del texto nuevo.
let note = document.getElementById("note");
note.innerHTML = "Dock 2";
console.log(note.textContent);
console.log(note.querySelector("em"));
La primera línea es Dock 2. La segunda es null. Boarding ya no estaba. Esta escritura se lleva también el em.
Añade gate B y conserva Dock 2
insertAdjacentHTML("beforeend", ...) analiza un fragmento y lo pone al final. Esta cadena empieza con un espacio para que las dos partes sigan siendo dos palabras. Hay otras posiciones. Esta página solo usa beforeend.
let note = document.getElementById("note");
note.insertAdjacentHTML("beforeend", " <span>gate B</span>");
console.log(note.textContent);
console.log(note.querySelector("span").textContent);
La primera línea es Dock 2 gate B. La segunda es gate B. Dock 2 sigue en la nota. Asignar esa misma cadena del span con innerHTML habría borrado Dock 2.
Una línea bajo el vale
El script está al final de body, cuando el vale ya existe. Guarda la palabra Late antes de que Dock 2 sustituya al em, y luego escribe una línea con el barco, esa palabra guardada y la nota después de añadir gate B.
<!DOCTYPE html>
<html>
<head>
<title>changing html — page</title>
</head>
<body>
<article id="slip">
<h2 id="boat">Gull</h2>
<p id="when">09:10</p>
<p id="note">Boarding</p>
<p id="line">…</p>
</article>
<script>
let boat = document.getElementById("boat");
let note = document.getElementById("note");
boat.textContent = "Heron";
note.innerHTML = "<em>Late</em>";
let late = note.textContent;
note.innerHTML = "Dock 2";
note.insertAdjacentHTML("beforeend", " <span>gate B</span>");
document.getElementById("line").textContent = boat.textContent + " / " + late + " / " + note.textContent;
</script>
</body>
</html>
La línea dice Heron / Late / Dock 2 gate B. La hora sigue siendo 09:10. Late en la línea es la palabra guardada antes del borrado. La nota ya no dice Late. La página siguiente cambia el CSS de elementos como estos y no añade otra forma de encontrarlos.
Revisa el vale
- Muestra los tres textos iniciales y espera Gull, 09:10 y Boarding
- Pon el barco en Heron y la nota en los caracteres em; espera esa cadena y un em null
- Pon innerHTML en la cadena em; espera textContent Late, innerHTML aún con etiquetas, y un em que no es null
- Pon innerHTML en Dock 2 y espera null para em
- Añade el span con beforeend y espera Dock 2 gate B, luego el texto del span gate B
- Lee la línea y espera Heron / Late / Dock 2 gate B; lee la hora y espera 09:10
Fallos en este vale
La página se abre igual. La asignación escribió el tipo de valor equivocado.
- Meter en
innerHTMLun nombre escrito en ventanilla, donde<se vuelve marcado - Esperar que
textContent = "<em>Late</em>"cree unem - Leer
textContentdespués de escribir el em y esperar las etiquetas en esa cadena - Asignar
innerHTMLotra vez y esperar que elemsiga - Añadir gate B con
innerHTMLy perder Dock 2 - Quitar el espacio inicial, de modo que la nota diga
Dock 2gate B - Poner
styleaquí; la página siguiente cambia el CSS - Llamar a
createElementaquí; una página posterior crea nodos nuevos
Qué te llevas
textContentescribe texto plano y no interpreta etiquetasinnerHTMLinterpreta etiquetas y sustituye cada hijo- Tras escribir el em,
textContentes Late einnerHTMLsigue con las etiquetas - Un segundo
innerHTMLborra elem insertAdjacentHTML("beforeend", ...)añade marcado y conserva Dock 2- La hora sigue en 09:10 porque nadie la asigna
- La línea dice Heron / Late / Dock 2 gate B
🧠 Pon a Prueba tu Conocimiento
Pon a Prueba tu Conocimiento
Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema
📝 Instrucciones
- Lee cada pregunta cuidadosamente
- Selecciona la mejor respuesta para cada pregunta
- Puedes repetir el quiz tantas veces como quieras
- Tu progreso se mostrará en la parte superior