JavaScript - Cómo devolver éstos datos del DOM?

 
Vista:
sin imagen de perfil

Cómo devolver éstos datos del DOM?

Publicado por Mariana (10 intervenciones) el 01/12/2022 13:14:23
Hola a todos! Estoy con un ejercicio de Javascript que implica simular un carrito de compras, pero cargando las tarjetas de los productos en forma dinámica a través del DOM y agregarlos a un div contenedor que emulará el catálogo. Quise usar una función para automatizar la creación de todas las etiquetas y que a medida que se van creando tomen los datos del array Productos.
Lo que no estoy pudiendo hacer es una vez que tengo las etiquetas de los productos poder integrarlas al catálogo y hacerlas visibles en el documento HTML (por ahora sólo las veo en consola, pero en lugar de verlas por separado aparecen así div#productos )
Saludos y muchas gracias!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
let productos = [{
    id: 1,
    nombre: 'Lápiz labial rojo',
    descripcion: 'Lápiz labial color rojo',
    precio: 2.000,
    imagen: '../img/labial.png',
    categoría: 'Boca',
},
{
    id: 2,
    nombre: 'Sombra de ojos',
    descripcion: 'Varios colores de sombra de ojos',
    precio: 3.200,
    imagen: '../img/sombra__de__ojos.png',
    categoría: 'Ojos',
},
{
    id: 3,
    nombre: 'Rubor rosado',
    descripcion: 'Rubor color rosado',
    precio: 1.500,
    imagen: '../img/rubor.png',
    categoría: 'Cara',
},
{
    id: 4,
    nombre: 'Delineador negro',
    descripcion: 'Delineador color negro',
    precio: 1.250,
    imagen: '../img/delineador.png',
    categoría: 'Ojos',
},
{
    id: 5,
    nombre: 'Crema corporal de castañas',
    descripcion: 'Botella de crema corporal de castañas',
    precio: 2.100,
    imagen: '../img/crema__corporal.png',
    categoría: 'Cuerpo',
},
{
    id: 6,
    nombre: 'Shampoo antiquiebre de castañas',
    descripcion: 'Botellas de shampoo y acondicionador para el cabello',
    precio: 2.550,
    imagen: '../img/shampoo.png',
    categoría: 'Cabello',
},
];
 
// 1) Obtener el ID del carrito
 
const carrito = document.getElementById("minicarrito");
console.log(carrito);
 
// 2) Crear el catálogo de c/u de los productos
 
const catalogo = document.createElement("div");
catalogo.setAttribute("id", "productos");
 
let div = "";
const crearElementos = productos.map(producto => {
 
 
    // a) Div que contendrá cada una de las tarjetas
    div = document.createElement("div");
    // b) Crear la img
    let img = document.createElement("img");
    //c) Agregarle una clase
    img.className = "tarjeta";
    // d) Agregar el atributo src y la ruta accediendo a la propiedad imagen de cada objeto
    img.setAttribute = ("src", producto.imagen);
    // e) Agregar el atributo alt
    img.setAttribute = ("alt", "descripcion");
    div.append(img);
 
    // 3) Crear el cuerpo de cada tarjeta
    let tarjetaCuerpo = document.createElement("div");
    tarjetaCuerpo.className = "card-body";
 
    // 4) Crear h3 con el título de cada producto
 
    let tituloTarjeta = document.createElement("h3");
    tituloTarjeta.className = "card-title";
    tituloTarjeta.innerHTML = producto.nombre;
    // Agregar el título del producto al cuerpo de la tarjeta
    tarjetaCuerpo.append(tituloTarjeta);
 
    // 5) Agregar la descripción de cada producto
    let descripcionProducto = document.createElement("p");
    descripcionProducto.className = "card-text";
    // Agregar la descripción de cada producto
    descripcionProducto.innerHTML = producto.descripcion;
    // Agregar la descripción al cuerpo de la tarjeta
    tarjetaCuerpo.append(descripcionProducto);
    // Al div contenedor le agrego la tarjeta con toda la info del producto
    div.append(tarjetaCuerpo);
    catalogo.appendChild(div);
    return div;
 
});
console.log(catalogo);
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Cómo devolver éstos datos del DOM?

Publicado por Marlon (90 intervenciones) el 01/12/2022 19:31:27
Para poder añadirlos al documento tienes que añadir el div que creaste "catalogo" al contenedor que en tu caso creo que es "minicarrito"

1
minicarrito.appendChild(catalogo)

Ahora solo estas viendo en consola div#productos porque le estas indicando a la consola que imprima un elemento llamado "catalogo"
y ese div por dentro tiene muchos elementos hijos asi como atributos,metodos y funciones...
si quisieras obtener cada texto de cada titulo de tarjeta que se añadio al DOM deberias hacer algo como esto:

1
console.log(catalogo.childNodes[0].childNodes[1].childNodes[0].textContent);

pero aquí solo obtendría una sola tarjeta.. si quieras verlas todas en la consola tendrías que recorrer cada childNodes de cada producto en un ciclo...
Saludos!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Cómo devolver éstos datos del DOM?

Publicado por Mariana (10 intervenciones) el 02/12/2022 00:39:34
Muchas gracias Marlon! Sólo una última pregunta: sabes cual es la forma para acceder al la ruta de la img? Logré mostrar los productos ya en el body, pero las imágenes no aparecen. Están guardadas en una carpeta llamada img y el archivo js tiene su propia carpeta llamada también js. En una etiqueta HTML común la ruta sería: src = "../img/producto.png", pero cargándolas desde el DOM después del atributo src no sé bien cómo cargarlas. En el objeto donde dice img está bien lo que aparece ahí? Es decir, está bien que diga imagen: ../img/producto.png ?
Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Cómo devolver éstos datos del DOM?

Publicado por Marlon (90 intervenciones) el 02/12/2022 05:58:30
Si, tienes un array de objetos y una propiedad llamada "imagen" con un valor en String (que es lo correcto para rutas de archivos) con la ruta donde esta la imagen, eso esta muy bien.

para añadir la propiedad "src" a el elemento imagen que estas creando usa simplemente .src y no setAttribute

1
img.src = producto.imagen;

Eso es todo, ya lo unico que debes es jugar con la ruta de las imágenes, me imagino que tu documento HTML esta en la raiz del proyecto y ahí mismo están las carpetas JS y IMG que indicas, verdad? Entonces

1
'../img/labial.png'
Dos puntos y un slash le indicas al documento que retroceda un directorio y luego busque una carpeta llamada 'img' la abra y ahí encuentra 'labial.png'. por ejemplo si tuvieras tu html dentro de una carpeta esto te serviría ya que no esta al mismo nivel de ruta que las carpetas IMG y JS
Ahora si el HTML esta al mismo nivel de raiz que la demas carpetas solamente debes poner la ruta sin los puntos

1
'img/labial.png'

Y a si sucesivamente dependiendo de como este tu árbol de rutas

Cualquier duda pregunta. Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cómo devolver éstos datos del DOM?

Publicado por Mariana (10 intervenciones) el 02/12/2022 10:28:32
Muchísimas gracias Marlon! Tu respuesta me sirve un montón!
Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar