Aprendemos a recuperar datos de los elementos HTML usando los atributos data-
midudev
Más clases y directos en YouTube
¿Qué son los atributos data-?
Los atributos data- son atributos que se utilizan para almacenar datos en los elementos HTML. Son útiles para almacenar datos que no se van a mostrar en la página pero que pueden ser útiles para nuestro código JavaScript.
<div data-nombre="Miguel" data-edad="25"></div>
Ahora, para recuperar los datos, podemos usar el objeto dataset del elemento.
const div = document.querySelector('div')console.log(div.dataset.nombre) // "Miguel"console.log(div.dataset.edad) // "25"
El objeto
datasetes un objeto que contiene todos los atributosdata-del elemento, pero sin el prefijodata-.
También podemos recuperar los datos usando el método getAttribute del elemento.
const div = document.querySelector('div')console.log(div.getAttribute('data-nombre')) // "Miguel"console.log(div.getAttribute('data-edad')) // "25"
El método
getAttributedevuelve el valor de cualquier atributo del elemento. Por eso, en este caso, debemos pasarle el nombre del atributo con el prefijodata-.
Filtrando los resultados de la lista de empleos
Con todo lo que hemos aprendido hasta ahora, podemos filtrar los resultados de la lista de empleos usando los atributos data- para recuperar los datos de los elementos HTML.
Lo primero es que en nuestro HTML debemos añadir el atributo data-modalidad a cada uno de los elementos de la lista de empleos.
<div class="jobs-listings"> <article data-technology="react" data-modalidad="remoto" class="job-listing-card">...</article> <article data-modalidad="cdmx" class="job-listing-card">...</article> <article data-modalidad="guadalajara" class="job-listing-card">...</article> <article data-modalidad="remoto" class="job-listing-card">...</article></div>
Ahora que nuestro marcado está listo y nos indica la modalidad de cada uno de los empleos, podemos filtrar los resultados de la lista de empleos usando los atributos data- para recuperar los datos de los elementos HTML.
const filter = document.querySelector('#filter-modalidad')const jobs = document.querySelectorAll('.job-listing-card')filter.addEventListener('change', function () { const selectedValue = filter.value jobs.forEach((job) => { // recuperamos el valor de `data-modalidad` del elemento const modalidad = job.dataset.modalidad // si el valor seleccionado es vacío o es igual al valor de `data-modalidad` del elemento, mostramos el elemento if (selectedValue === '' || selectedValue === modalidad) { job.style.display = 'flex' } else { job.style.display = 'none' } })})
¿Por qué usamos
selectedValue === ''? Porque si el usuario no ha seleccionado ningún valor, entonces el valor deselectedValueserá una cadena vacía.
¿Y por qué
job.style.display = 'flex'? Porque antes de ocultarlo, ese elemento ya tiene el estilodisplay: flexaplicado. Así que si lo queremos mostrar, deberemos asegurarnos que sigue teniendo ese valor.
Ahora, vamos a terminar de estilar los selects para que se vean mejor.
