search
CursosEmpresasBlogLiveConfPrecios
Curso de Manipulación del DOM

Otras formas de agregar

Curso de Manipulación del DOM

Contenido del curso

DOM y Web API

  • 1
    Y entonces nació internet...

    Y entonces nació internet...

    02:23 min
  • 2
    Accede a la versión más actualizada de este contenido

    Accede a la versión más actualizada de este contenido

    00:14 min
  • 3
    ¿Qué es el DOM?

    ¿Qué es el DOM?

    02:39 min
  • 4
    Web APIs modernas

    Web APIs modernas

    03:17 min

Operaciones básicas

  • 5
    Leer nodos

    Leer nodos

    09:31 min
  • 6
    NodeLists vs Array

    NodeLists vs Array

    03:46 min
  • 7
    Crear y agregar

    Crear y agregar

    15:47 min
  • 8
    Otras formas de agregar

    Otras formas de agregar

    Viendo ahora
  • 9
    Atributos y propiedades

    Atributos y propiedades

    05:12 min
  • 10
    Eliminar nodos

    Eliminar nodos

    09:31 min
  • 11
    Operaciones en lote

    Operaciones en lote

    06:52 min

Workshop 1: Fetch

  • 12
    Presentación del proyecto

    Presentación del proyecto

    01:10 min
  • 13
    Descargando información y creando nodos

    Descargando información y creando nodos

    18:36 min
  • 14
    Enriqueciendo la información

    Enriqueciendo la información

    10:53 min
  • 15
    Usando la API de internacionalización del browser

    Usando la API de internacionalización del browser

    12:14 min
  • 16
    Comparte el resultado

    Comparte el resultado

    02:18 min

Eventos

  • 17
    Reaccionar a lo que sucede en el DOM

    Reaccionar a lo que sucede en el DOM

    13:58 min
  • 18
    Event propagation

    Event propagation

    12:08 min
  • 19
    Event delegation

    Event delegation

    05:32 min

Workshop 2: Lazy loading

  • 20
    Presentación del proyecto

    Presentación del proyecto

    03:34 min
  • 21
    Nuestro propio plugin Lazy Loading

    Nuestro propio plugin Lazy Loading

    08:32 min
  • 22
    Creando las imagenes con JavaScript

    Creando las imagenes con JavaScript

    17:33 min
  • 23
    Intersection Observer

    Intersection Observer

    14:21 min
  • 24
    Aplicando Lazy loading

    Aplicando Lazy loading

    13:07 min
  • 25
    Comparte el resultado

    Comparte el resultado

    03:17 min

Workshop 3

  • 26
    Proyectos propuestos

    Proyectos propuestos

    04:17 min

Librerías relacionadas

  • 27
    ¿Y jQuery?

    ¿Y jQuery?

    03:41 min
  • 28
    ¿Y JSX?

    ¿Y JSX?

    09:40 min

Conclusiones

  • 29
    Conclusiones

    Conclusiones

    01:56 min
schoolTomar examen

Otras formas de agregar

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

Comentarios48

Carlos Eduardo Gomez García

Carlos Eduardo Gomez García

Estudiante
Hace 6 años
    Andrés Felipe Lopez gomez

    Andrés Felipe Lopez gomez

    Estudiante
    Hace 6 años
    Luis Felipe Medina Rodriguez

    Luis Felipe Medina Rodriguez

    Estudiante
    Hace 6 años
Fernando Quinteros Gutierrez

Fernando Quinteros Gutierrez

Estudiante
Hace 6 años
    Edgar Lopez Arroyo

    Edgar Lopez Arroyo

    Estudiante
    Hace 5 años
George Báez Beltré

George Báez Beltré

Estudiante
Hace 6 años
    Jonathan 🦑 Alvarez

    Jonathan 🦑 Alvarez

    Profesor
    Hace 6 años
Jimmy Buriticá Londoño

Jimmy Buriticá Londoño

Estudiante
Hace 6 años
Isaac Hernandez Resendiz

Isaac Hernandez Resendiz

Estudiante
Hace 5 años
Rodrigo Martinez

Rodrigo Martinez

Estudiante
Hace 6 años
    Librado Hernandez Cruz

    Librado Hernandez Cruz

    Estudiante
    Hace 4 años
    Pol Valle

    Pol Valle

    Estudiante
    Hace 3 años
Santiago Andres Alvarez Cuadros

Santiago Andres Alvarez Cuadros

Estudiante
Hace 4 años
    Charles Castillo Rosas

    Charles Castillo Rosas

    Estudiante
    Hace 4 años
    Frandel Corporan Rodríguez

    Frandel Corporan Rodríguez

    Estudiante
    Hace 3 años
Sebastian Gonzalez

Sebastian Gonzalez

Estudiante
Hace 6 años
    Jimmy Buriticá Londoño

    Jimmy Buriticá Londoño

    Estudiante
    Hace 6 años
    Sebastian Gonzalez

    Sebastian Gonzalez

    Estudiante
    Hace 6 años
Rony Porraz Vargas

Rony Porraz Vargas

Estudiante
Hace 6 años
David Daniel Castillo Nava

David Daniel Castillo Nava

Estudiante
Hace 6 años
Daniel David Mármol Rivero

Daniel David Mármol Rivero

Estudiante
Hace 5 años
Roberto Medina

Roberto Medina

Estudiante
Hace 6 años
    Massimo Di Berardino

    Massimo Di Berardino

    Estudiante
    Hace 6 años
    Roberto Medina

    Roberto Medina

    Estudiante
    Hace 6 años
Roger Colquehuanca

Roger Colquehuanca

Estudiante
Hace 6 años
Leandro Gavidia Santamaria

Leandro Gavidia Santamaria

Estudiante
Hace 4 años
Efraín Hernández García

Efraín Hernández García

Estudiante
Hace 5 años
    Eduardo Rodriguez

    Eduardo Rodriguez

    Estudiante
    Hace 5 años
Pablo Aquino

Pablo Aquino

Estudiante
Hace 5 años
Roberto Medina

Roberto Medina

Estudiante
Hace 6 años
Xavier Flores

Xavier Flores

Estudiante
Hace 3 años
Roger Colquehuanca

Roger Colquehuanca

Estudiante
Hace 6 años
Juan Esteban Galvis

Juan Esteban Galvis

Estudiante
Hace 6 años

Existen otras formas de agregar nodos: .

  • node.outerHTML: Sirve para leer HTML para leer HTML
  • node.innerHTML: Sirve para escribir HTML

. PEEEEEEERO, tienen un problema de seguridad 👀☝️ . hack: Cuando en el inspector de elementos seleccionas un elemento y en la consola escribes $0, este te devolverá el elemento tal como si lo hubieses seleccionado con document.querySelector(). . Aquí les dejo el playground que usó el profesor para hacer las pruebas: https://codepen.io/jonalvarezz/pen/OJXeNab?editors=0110 . El problema con estas formas de inserciones es que permiten la inserción XSS, es decir, código maligno, y cualquier usuario programador malicioso podría meter scripts molestos, imagina que cada que un usuario llegue a tu página le salga un alert... ¡Sería catastrófico! Siempre sanitiza (remover caracteres especiales) los inputs de tus usuarios

Excelente aporte

te encuentro

💳 Otras formas de agregar

Ideas/conceptos claves

Los ataques XSS son un tipo de inyección en la cual un atacante logra ejecutar código en los navegadores de los usuarios que acceden a un sitio web legítimo

Apuntes

  • Existen otras formas de leer y agregar nodos que son muchas convenientes usando cadenas de texto
    • node.outerHTML (leer)
      • Nos dejar leer el HTML como una cadena del nodo seleccionado
    • node.innerHTML (escribir)
      • Nos deja modificar el contenido del nodo
  • La desventaja es que convierte el texto en HTML pudiendo crear inyecciones de XSS
    • Debido a que convierte todo el texto en HTML, habiendo la posibilidad de que se pueda inyectar códigos de terceros
  • Si es que fuera muy necesario usar estos métodos y el usuario necesitara ingresar los datos, se debe hacer si o si un proceso de sanitize (Limpieza)

RESUMEN: Existe otras formas de leer y escribir el HTML, pero tienen un riesgo de ataques XSS, no es mala siempre y cuando se tenga un cuidado con las posibilidades del usuario

Gran resumen. Yo utilizaba innerHTML ahora me lo pensare dos veces.

https://github.com/gbirke/Sanitize.js/blob/master/README.md A quien le pueda servir

Super útil! Siempre uso alguno por el estilo en mis proyectos :)

Ten en cuenta que al usar outerHTML trae todo el HTML incluyendo los Tag del Nodo, con innerHTML solo debes incluir el código HTML que va al interior de los Tag.

7-innerhtml-vs-outerhtml.png

😁 No hice nada pero me divertí 🤣

Una de las razones de por que no es seguro utilizar .outerHTML

Screenshot_35.png

Codigo

<iframe width="560" height="315" src="https://www.youtube.com/embed/dQw4w9WgXcQ?controls=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

uff "que rolon"

outer o Inner

Gracias a innerHTML, ahora tengo todos estos puntos de Platzi rank 😂

Captura de pantalla 2022-09-01 010645.png

xDDD

innerHTML => agregar HTML y outerHTMl => leer HTML

Son tan faciles y comodas de usar, pero para nada recomendadas, lo que sucede con ellas es que te permiten agregar un bloque completo de HTML ejemplo toda una barra de navegacion como si fuera codigo en un archivo .html, que con createElement seria un poco molesto y toma mas tiempo.
. PERO no se recomienda ya que puede insertarse en el codigo elementos malignos que pueden afectar la experiencia del usuario en la pagina. Lo que se debe hacer sobre todo cuando es texto que escribe el usuario ejemplo llenando un formulario es sanitizar o limpiar ese texto antes de usar el innerHtml para evitar que venga contenido no deseado!

Yo acostumbro usar innerHTML para armar sitios y me ha servido mucho. La recomendación que das esta bien, no confiar en los usuarios, pero en ti como desarrollador si puedes confiar. 👍

Es verdad, como decía el profesor es en los campos donde interactúe especialmente con texto el usuario es preferible no usar innerHTML, y ya para el resto del código se puede usar sin problema. Al igual es bueno aprender de seguridad y poder implementarla en el desarrollo web

¿Que es XSS? O tambien llamado Cross site scripting es una secuencia de comandos en sitios cruzados. es un tipo de vulnerabilidad informática o agujero de seguridad típico de las aplicaciones Web, que puede permitir a una tercera persona inyectar en páginas web visitadas por el usuario código JavaScript o en otro lenguaje similar.​

Referencia a Wikipedia

Ya las medio explique en la clase anterior jejej!!
Nota Mental: En nuestro inspector de elemento si seleccionamos un elemento con el mouse y luego en la consola escribimos $0 esto nos retornara dicho elemento seleccionado.
Las otras formas de seleccionar elementos son:

// Elemento de ejemplo: <div id="referencia">Hola</div> // Este asignara a element todo el elemento que estemos pasando como referencia const referencia = document.getElementById("referencia"); const element = referencia.outerHTML; console.log(element); // <div id="referencia">Hola</div>

Por otra parte :

// Este nos retornara el contenido de referencia que seleccionaste const referencia = document.getElementById("referencia"); const element = referencia.innerHTML; console.log(element); //Hola

Para reasignarlo solo debemos asignarle el valor que queramos.

referencia.outerHTML = "Saludos"; // Saludos referencia.innerHTML = "Saludos"; // <div id="referencia">Saludos</div>

Podemos tratar esto como un string podríamos hacer esto

referencia.outerHTML += `<div>Soy otro elemento<div>`; //Esto generaría algo así <div id="referencia">Hola</div><div>Soy otro elemento<div> referencia.innerHTML += `<div>Soy otro elemento<div>`; // Esto generaria algo asi: <div id="referencia">Hola<div>Soy otro elemento<div></div>

Nota importante: Se debe usar con cuidado ya que puede ser factor de inseguridad en la web.

Es conveniente usarlo porque se pueden crear cosas interesantes, pero se debe evitar cuando la cadena de texto (lo que renderizamos mediante innerHTML), si eso de alguna forma es producto de algo que escribió el usuario NUNCA CONFIAR en eso, porque hay que pasarlo por una limpieza para asegurarnos de que el código no tenga nada maligno dentro de él.

Alguien conoce una página donde vengan las reglas para hacer una correcta sanitización del código javascript o html?

Hola @robm, podrías utilizar Ligthhouse para examinar tu web y esta herramienta te ofrece algunos tips y cosas que puedes hacer para mejorarla

muchas gracias Massimo, se ve muy interesante, lo voy a checar.

interesante este topic.

es fácil usar innerHTML pero tiene sus detalles, también escuche sobre XSS. pero ahora lo veo mas a detalle. comparto algo sobre sanitize https://gomakethings.com/how-to-sanitize-third-party-content-with-vanilla-js-to-prevent-cross-site-scripting-xss-attacks/

Además de ** document.outerHTML**, esta document.outerText que en vez de devolvernos el nodo completo, nos devuelve su texto. Y también está ** innerText**, que en vez de inyectar un nodo HTML, inyecta un texto, al contrario de innerHTML, que nos permite inyectar nodos completos.

Leí un aporte del profesor donde el dice que el usa https://www.npmjs.com/package/sanitize-html para hacer sanitize de un HTML y evitar estos problemas de seguridad.

gracias por el aporte

  • node.outerHTML, para leer el nodo HTML
  • node.innerHTML, para escribir el nodo HTML, se debe tener cuidado para evitar problemas de seguridad XSS.

Hola:

Por si alguien le interesa saber que es XSS: https://www.welivesecurity.com/la-es/2015/04/29/vulnerabilidad-xss-cross-site-scripting-sitios-web/

Saludos :)

una practica mas segura para innerHTML es innerText, así evitas los ataques XSS

Considera no usar InnerHTML cuando el texto a renderizar proviene del usuario ejemplos etiquetas INPUTS

Muy interesante la clase, es verdad se podría hacer que primero lea la cadena (OuterHTML) y valide que no tenga JavaScript o líneas no permitidas para luego hacer el innerHTML

Yo por ejemplo quiero darle uso en un sistema de comentarios para que no sea texto plano sino poder agregar imágenes, negrilla, etc (Claro validar que no ponga nada raro por la falla de seguridad que vimos)