Introducción a JavaScript

1

¿Por qué aprender JavaScript?

2

¡Hola Mundo! en Mac

3

¡Hola Mundo! en Windows

4

Anatomía de una variable

5

Tipos de datos en JavaScript

6

Creación de strings

7

Operadores aritméticos

8

Conversión de tipos: Type Casting y Coerción

9

Conversión de tipos explícita e implícita

Estructuras de Control y Lógica

10

Operadores de comparación

11

Operadores lógicos

12

Ejecución condicional: if

13

Ejercicio: Adivina el número

14

Ejecución condicional: switch

15

Loop: for

16

Loop: for of

17

Loop: for in

18

Loop: while

19

Loop: do while

Funciones y This

20

Anatomía de una función

21

Funciones vs Métodos

22

Funciones puras e impuras

23

Arrow function y enlace léxico

24

Contextos de ejecución y scope chain

25

¿Qué es Closure?

26

Preguntas a Desarrolladores Senior: ¿Por qué aprender Desarrollo Web?

Manipulación de Arrays

27

Introducción a Arrays

28

Mutabilidad e inmutabilidad de Arrays

29

Modificación básica del final con push( ), pop( )

30

Iteración con map( ) y forEach( )

31

Filtrado y reducción con filter( ) y reduce( )

32

Búsqueda de elementos con find( ) y findIndex( )

33

Crear copias con slice( )

34

Spread operator: casos de uso

Programación Orientada a Objetos

35

Anatomía de un Objeto

36

Trabajando con objetos en JavaScript

37

Función constructora

38

¿Qué es una clase?

39

Prototipos y herencias

40

Herencia en la práctica

41

Prototipos en la práctica

42

this en JavaScript

43

Proyecto: Crea una red social

44

Proyecto: Crea una red social parte 2

Asincronía en JavaScript

45

¿Cómo funciona el JavaScript Engine?

46

Promesas en JavaScript

47

Usando Async y await en JavaScript

48

For await of

49

¿Cómo funciona la web?

50

¿Cómo funciona HTTP?

51

Método GET en JavaScript

52

Método POST en JavaScript

53

Método DELETE en JavaScript

54

Importancia del id en el método DELETE

55

ECMAScript 6 y tus siguientes pasos

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Método DELETE en JavaScript

53/55
Recursos

¿Cómo borrar elementos usando eventos en JavaScript?

¿Alguna vez te has preguntado cómo interactuar dinámicamente con los elementos de una página web, específicamente para eliminarlos de un servidor? Este artículo explora la implementación de una función de borrar usando JavaScript, que expande nuestras habilidades de desarrollo web al permitirnos eliminar elementos de manera eficiente.

¿Qué es el delegation pattern?

Antes de proceder a implementar la funcionalidad de borrado, es esencial comprender el delegation pattern. Este patrón nos permite escuchar eventos de los elementos hijos mediante la asignación de un único evento al elemento padre. En lugar de agregar un evento a cada botón individualmente, este enfoque mejora el rendimiento asignándole el evento al contenedor principal de los elementos.

¿Cómo identificar el elemento a borrar?

Para eliminar un elemento del servidor mediante una petición HTTP, primero necesitamos identificarlo de manera única. En nuestro HTML, cada elemento generalmente tiene un ID único. Al hacer clic en el botón de eliminar, debemos:

  1. Detectar el evento en el contenedor.
  2. Verificar si el elemento objetivo (target) del evento es un botón.
  3. Obtener el ID del elemento padre (article) más cercano al botón que fue clicado.

Aquí es donde el método closest de JavaScript juega un papel crucial al encontrar el ancestro más cercano que coincide con el selector especificado:

document.addEventListener('click', function(event) {
  if (event.target.tagName === 'BUTTON') { // Verifica si el click fue en un botón
    let postID = event.target.closest('article').id;
    console.log(postID);  // Imprime el ID del artículo
  }
});

¿Cómo enviar una solicitud DELETE al servidor?

Una vez tenemos el ID del elemento, podemos enviar una solicitud DELETE al servidor. Las solicitudes DELETE con frecuencia requieren que especifiquemos el recurso que deseamos borrar adjuntando su ID en la URL:

fetch(`http://tuservidor.com/posts/${postID}`, {
  method: 'DELETE'
})
.then(response => { 
  if (response.ok) {
    console.log('El post fue borrado');
  }
})
.catch(error => console.error('Error:', error));

¿Qué se debe considerar al trabajar con APIs?

Cuando trabajamos con cualquier API, es fundamental revisar su documentación. Cada API tiene requerimientos específicos sobre cómo se deben estructurar las solicitudes y qué tipo de datos esperan recibir. En nuestro caso, nos aseguramos de que la URL y el método de solicitud sean correctos para que el servidor procese la eliminación del recurso correctamente.

¿Funciona realmente?

Para verificar si nuestra implementación está funcionando, debemos revisar las herramientas de desarrollo del navegador. Observa las pestañas de Network para asegurar que el método DELETE fue enviado correctamente y recibe un status 200 en respuesta, lo cual indica éxito:

  • Evalúa el método que muestra DELETE.
  • Revisa el endpoint de la URL utilizada.
  • Confirma que el servidor recibió correctamente la operación.

Al aplicar estos conocimientos, no solo mejoramos la experiencia del usuario en la web, sino que también potenciamos nuestras habilidades en desarrollos complejos. A medida que internalices estos conceptos, estarás cada vez más cerca de dominar el desarrollo web interactivo y eficiente. ¡Sigue explorando y perfeccionando tus habilidades!

Aportes 9

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Me encantó el uso de event.target.closest para obtener el id mas cercano del button. Lo había hecho de otra forma un poco mas invasiva creando muchos Form dinamicos. Excelente clase la verdad.
Un saludo Interesante hacer el curso donde se vea el proceso con APIs que se puedan manipular, para agregar, editar (PUT y PATCH) y eminiar registros. Podemos para esto, hacer el curso de APIs con Laravel (por ejemplo) y tendríamos el ciclo base completado. Sería genial
Cordial saludo, esta es otra forma que se puede resolver el Método Delete ```js function sendHTTPRequest(method, url, data = null) { const options = { method: method, headers: { "Content-Type": "application/json", }, }; if (data) { options.body = JSON.stringify(data); } return fetch(url, options).then((response) => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }); } async function fetchPost() { try { const responseData = await sendHTTPRequest( "GET", "https://jsonplaceholder.typicode.com/posts" ); console.log(responseData); const listOfPosts = responseData; const listElement = document.getElementById("posts-container"); // Limpiar el contenido anterior listElement.innerHTML = ''; for (const post of listOfPosts) { const postContainer = document.createElement("article"); postContainer.id = post.id; postContainer.classList.add("post-item"); const title = document.createElement("h2"); title.textContent = post.title; const body = document.createElement("p"); body.textContent = post.body; const button = document.createElement("button"); button.textContent = "DELETE Content"; button.addEventListener("click", () => deletePost(post.id)); postContainer.append(title); postContainer.append(body); postContainer.append(button); listElement.append(postContainer); } } catch (error) { console.error('There was an error fetching the posts:', error); } } function createNewPost(title, content) { const userId = Math.random(); const post = { title: title, body: content, userId: userId, }; sendHTTPRequest("POST", "https://jsonplaceholder.typicode.com/posts", post) .then(response => { console.log('Post created:', response); return fetchPost(); // Actualizar la lista de posts después de crear uno nuevo }) .catch(error => { console.error('Error creating post:', error); }); } function deletePost(postId) { sendHTTPRequest("DELETE", `https://jsonplaceholder.typicode.com/posts/${postId}`) .then(() => { console.log(`Post ${postId} deleted`); return fetchPost(); // Actualizar la lista de posts después de eliminar uno }) .catch(error => { console.error(`Error deleting post ${postId}:`, error); }); } const form = document.querySelector("form"); form.addEventListener("submit", (event) => { event.preventDefault(); const title = event.currentTarget.querySelector("#title").value; const content = event.currentTarget.querySelector("#content").value; createNewPost(title, content); }); const fetchButton = document.querySelector("#available-posts button"); fetchButton.addEventListener("click", fetchPost); // No es necesario este event listener porque el botón de eliminación ya tiene su propio event listener /* const listElement = document.getElementById("posts-container"); listElement.addEventListener("click", (event) => { console.log(event); if (event.target.tagName === "BUTTON") { const postId = event.target.closest("article").id; console.log(postId); } }); */ ```
sería mejor aclarar que para un método tan destructivo y peligroso como DELETE es necesario implementar un cuadro de diálogo o un modal (incluso un prompt), para advertir al usuario que confirme la acción, por buenas prácticas
La validación tiene que ser con "BUTTON" en Mayus o es indistinto? ![](https://static.platzi.com/media/user_upload/imagen-d2d2f08a-5eb1-494f-9e14-24d51b14f047.jpg)
**RESUMEN:** ![](https://static.platzi.com/media/user_upload/image-63c3c83d-64a4-400d-81e4-5ffd54e996c4.jpg)
Hi! Aquí nuevamente mis notas sobre cada parte del código, si algo se puede mejorar, díganme! ```js /* NUEVA PARTE */ postList.addEventListener("click", (event) => { //generamos otro evento click para postList console.log(event); if (event.target.tagName === "BUTTON") { //hacemos una validación, si el evento.target tiene el tag de "button", se ejecuta el bloque de código const postId = event.target.closest("article").id; //necesitamos extraer el id para saber qué post hay que eliminar, a su vez tomamos el article más cercano al botón y así eliminamos el mismo console.log(postId); sendHTTPRequest( //Llama a la función sendHTTPRequest, enviando una solicitud DELETE a la API, para eliminar el post con el postId correspondiente. "DELETE", `https://jsonplaceholder.typicode.com/posts/${postId}` ); } }); ```
Excelente curso maestro Diego, aprender con usted, es muy fácil
Maravillosa explicación del profesor Diego, el mejor de platzi sin dudas