JavaScript - Cómo filtrar con JS DOM?

 
Vista:
sin imagen de perfil

Cómo filtrar con JS DOM?

Publicado por Mariana (10 intervenciones) el 03/12/2022 19:50:31
Hola! Estoy queriendo filtrar una lista de categorías de productos con JS desde el DOM. Todo elemento HTML tiene que ser modificado con Js. Cómo podría ser la función para mostrar los productos si tengo 4 tags anchor sin ningún ID de base y sin poder tocar el html?

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
<div id="minicarrito">
                <p id="items-cargados"><span>0</span> ítems agregados</p>
                <p  id="precio-total">$<span>0</span> es el total</p>
                <p>Filtrar por <a href="#">Categoría 1</a> | <a href="#">Categoría 2</a> | <a href="#">Categoría 3</a> | <a href="#">Categoría 4</a></p>
                <button id="ver-carrito-btn">Ver carrito</button>
            </div>
 
 
let productos = [{
        id: 1,
        nombre: 'Lápiz labial rojo',
        descripcion: 'Su textura suave y cremosa permite un aplique perfecto mientras mantiene tus labios humecatados hasta por 12 hs.',
        precio: "2.000", // Pasado a string para visualizar los 0. Cambiarlo luego
        imagen: "../img/labial.png",
        categoría: 'Cara',
    },
    {
        id: 2,
        nombre: 'Sombra de ojos',
        descripcion: 'Una paleta de colores cálidos, fríos y vibrantes para cada momento del día y ocasión.',
        precio: "3.200",
        imagen: '../img/sombra__de__ojos.png',
        categoría: 'Ojos',
    },
    {
        id: 3,
        nombre: 'Rubor rosado',
        descripcion: 'De fácil aplicación y larga duración. Deja tus mejillas con un sutil brillo.',
        precio: "1.500",
        imagen: '../img/rubor.png',
        categoría: 'Cara',
    },
    {
        id: 4,
        nombre: 'Delineador negro',
        descripcion: 'Resaltá tu mirada con un color negro, perfecto y adaptable a cualquier color de ojos.',
        precio: "1.250",
        imagen: '../img/delineador.png',
        categoría: 'Ojos',
    },
    {
        id: 5,
        nombre: 'Crema corporal de castañas',
        descripcion: 'La crema de castañas hidrata y suaviza tu piel mientras deja un rico aroma.',
        precio: "2.100",
        imagen: '../img/crema__corporal.png',
        categoría: 'Cuerpo',
    },
    {
        id: 6,
        nombre: 'Shampoo antiquiebre de castañas',
        descripcion: 'Nutrí y fortalecé tu cabello con el poder de las castañas. Sus propiedades naturales antiquebre detienen la caída del pelo.',
        precio: "2.550",
        imagen: '../img/shampoo.png',
        categoría: 'Cabello',
    },
];
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 filtrar con JS DOM?

Publicado por Marlon (90 intervenciones) el 05/12/2022 01:51:24
En caso de que algun elemento del Html no tenga id puedes llamarlo desde tu JS utilizando querySelector

1
2
3
//aqui le estamos indicando a Javascript que busque en el documento todos los elementos "a" que tengan como padre a un elemento "p"
const links = document.querySelectorAll('p > a');
//es recomendable que al menos el elemento padre tenga in ID, con eso evitaríamos que también clasifique a cualquier otro link que haya por ahí que también este dentro de un "p"

Luego de esto recorremos el array que devuelve querySelector para poder añadir a cada link evento "onClick" para indicarle lo que queremos que ocurra al presionarlo.

1
2
3
4
5
6
7
8
9
10
11
12
const filtroCategoria = (e) => {
    const category = e.target; // aqui obtenemos cada elemento individualmente al que el usuario haga click
   // luego como no tiene un ID como identificador nos valemos de el texto que contenga para saber que categoría es
    if( category.textContent == 'Categoría 1') { console.log('filtrar por categoría 1') }
    if( category.textContent == 'Categoría 2') { console.log('filtrar por categoría 2') }
    if( category.textContent == 'Categoría 3') { console.log('filtrar por categoría 3') }
    if( category.textContent == 'Categoría 4') { console.log('filtrar por categoría 4') }
}
 
links.forEach(element => {
    element.addEventListener('click', filtroCategoria)
})

Espero te sirva. 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 filtrar con JS DOM?

Publicado por Mariana (10 intervenciones) el 05/12/2022 17:41:44
Muchísimas gracias Marlon! Llevaba muchos días sin saber cómo resolverlo!
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