Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

228
Vistas
¿Por qué mi función de desplazamiento funciona con ID pero no con clases?

Estoy tratando de agregar (no reemplazar) una clase a varios elementos cuando me desplazo hacia abajo 10px. Necesito apuntar a múltiples ID en algún HTML que no tengo forma de cambiar . Sin embargo, estos elementos comparten algunas clases, así que pensé que podría apuntar a uno de esos en su lugar.

Cuando uso getElementById, funciona bien y agrega una clase a una sola ID. Si uso getElementsbyClassName o querySelectorAll para apuntar a una clase, no funcionará.

Este funciona:

 tabs = document.getElementById("intro"); scrollFunc = function() { var y = window.scrollY; if (y >= 10) { tabs.classList.add("scrollNav"); } else { tabs.classList.remove("scrollNav"); } }; window.addEventListener("scroll", scrollFunc);

Este no:

 tabs = document.getElementsByClassName("navTabs"); scrollFunc = function() { var y = window.scrollY; if (y >= 10) { tabs.classList.add("scrollNav"); } else { tabs.classList.remove("scrollNav"); } }; window.addEventListener("scroll", scrollFunc);
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Debe recorrer cada elemento de la colección que devuelve getElementsByClassName .

Probar:

 tabs = document.getElementsByClassName("navTabs"); scrollFunc = function() { var y = window.scrollY; if (y >= 10) { [...tabs].forEach((tab) => { tab.classList.add("scrollNav"); }); } else { [...tabs].forEach((tab) => { tab.classList.remove("scrollNav"); }); } }; window.addEventListener("scroll", scrollFunc);

Según MDN, getElementsByClassName devuelve una "Colección HTML"https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection que por sí sola no tiene un método forEach. Puede usar la sintaxis extendida ... para agregar cada elemento de la colección en una nueva matriz [] que tiene un método forEach.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

about 4 years ago · Juan Pablo Isaza Denunciar

0

document.getElementsByClassName devuelve una HTMLCollection . El atributo classList existe solo en elementos individuales. Por otro lado, getElementById devuelve un elemento.

Para cambiar la lista de clases de cada elemento de la colección, debe convertirla en una matriz y luego recorrer cada elemento en ella. Vea abajo:

 tabs = [...document.getElementsByClassName("navTabs")]; scrollFunc = function() { var y = window.scrollY; if (y >= 10) { tabs.forEach(tab => tab.classList.add("scrollNav")); } else { tabs.forEach(tab => tab.classList.remove("scrollNav")); } }; window.addEventListener("scroll", scrollFunc);

Este código usa ES6; podría convertirlo fácilmente a una versión más compatible con el navegador.

Recursos Relacionados:

  • Colección HTML : document.getElementsByClassName("navTabs")
  • Elemento Singular: document.getElementById("intro")
  • Sintaxis extendida : [...document.getElementsByClassName("navTabs")]
  • Funciones de flecha : tab => tab.classList.add("scrollNav")
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda