Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Seleccionar varios elementos con la misma clase

Estas en el tema de Seleccionar varios elementos con la misma clase en el foro de Javascript en Foros del Web. Hola. En mi página tengo una serie de divs que quiero que tengan una altura proporcional al ancho del propio div. Para esto imagino que ...
  #1 (permalink)  
Antiguo 27/01/2017, 07:40
 
Fecha de Ingreso: abril-2015
Mensajes: 16
Antigüedad: 9 años
Puntos: 4
Seleccionar varios elementos con la misma clase

Hola.

En mi página tengo una serie de divs que quiero que tengan una altura proporcional al ancho del propio div. Para esto imagino que primero debo extraer el ancho de cada elemento con javascript y después aplicarle el mismo alto.

Este es mi código html:

Código HTML:
Ver original
  1. <div class="grid">
  2.           <a href=""><div class="box size1" style="background-image: url('img/01.jpg');"></div></a>
  3.           <a href=""><div class="box size2" style="background-image: url('img/21.jpg');"></div></a>
  4.           <a href=""><div class="box size2" style="background-image: url('img/15.jpg');"></div></a>
  5.           <a href=""><div class="box size3" style="background-image: url('img/07.jpg');"></div></a>
  6.           <a href=""><div class="box size4" style="background:#fff;"></div></a>
  7.           <a href=""><div class="box size5" style="background-image: url('img/27.jpg');"></div></a>
  8.           <a href=""><div class="box size2" style="background-image: url('img/35.jpg');"></div></a>
  9.           <a href=""><div class="box size1" style="background-image: url('img/32.jpg');"></div></a>
  10.           <a href=""><div class="box size6" style="background-image: url('img/33.jpg');"></div></a>
  11.           <a href=""><div class="box size5" style="background-image: url('img/26.jpg');"></div></a>
  12.           <a href=""><div class="box size4" style="background-image: url('img/24.jpg');"></div></a>
  13.         </div>

El código CSS para estos elementos:

Código CSS:
Ver original
  1. /* PORTFOLIO GRID */
  2. .grid .box {
  3.   background-size:cover;
  4.   background-position:center center;
  5. }
  6. .size1 {
  7.   width:50%;
  8.   height:800px;
  9.   float:left;
  10. }
  11. .size2 {
  12.   width:50%;
  13.   height:400px;
  14.   float:left;
  15. }
  16. .size3 {
  17.   width:100%;
  18.   height:400px;
  19.   background-position:center left !important;
  20.   float:left;
  21. }
  22. .size4 {
  23.   width:35%;
  24.   height:400px;
  25.   float:left;
  26. }
  27. .size5 {
  28.   width:65%;
  29.   height:400px;
  30.   float:left;
  31. }
  32. .size6 {
  33.   width:50%;
  34.   height:400px;
  35.   margin-top:-400px;
  36.   float:left;
  37. }

Y el código javascript:

Código Javascript:
Ver original
  1. function postControl() {
  2.  
  3.       var width1 = $(".size1").width();
  4.       var elemento1 = document.querySelector(".size1");
  5.       elemento1.style.height = width1 + "px";
  6.  
  7.       var width2 = $(".size2").width();
  8.       var elemento2 = document.querySelector(".size2");
  9.       elemento2.style.height = width1 * 0.5 + "px";
  10.  
  11.       var width3 = $(".size3").width();
  12.       var elemento3 = document.querySelector(".size3");
  13.       elemento3.style.height = width3 * 0.35 + "px";
  14.  
  15.       var width4 = $(".size4").width();
  16.       var elemento4 = document.querySelector(".size4");
  17.       elemento4.style.height = width4 * 0.928 + "px";
  18.  
  19.       var width5 = $(".size5").width();
  20.       var elemento5 = document.querySelector(".size5");
  21.       elemento5.style.height = width5 * 0.5 + "px";
  22.  
  23.       var width6 = $(".size6").width();
  24.       var elemento6 = document.querySelector(".size6");
  25.       elemento6.style.height = width6 * 0.5 + "px";
  26.       elemento6.style.top = width6 * 0.5 + "px";
  27.  
  28.   };

El javascript funciona perfectamente. El problema es que en dos elementos con la misma clase, solo funciona con el primero. Esto pasa en todos los elementos que se repiten.

¿Existe alguna forma de conseguir que cada parte del javascript aplique a todos los elementos de la misma clase?
  #2 (permalink)  
Antiguo 27/01/2017, 10:22
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: Seleccionar varios elementos con la misma clase

En lugar de usar querySelector(), usa querySelectorAll() https://developer.mozilla.org/es/doc...erySelectorAll

Pd.- Es raro que empieces usando la librería jquery y después dejes de usarla
  #3 (permalink)  
Antiguo 27/01/2017, 13:48
 
Fecha de Ingreso: abril-2015
Mensajes: 16
Antigüedad: 9 años
Puntos: 4
Respuesta: Seleccionar varios elementos con la misma clase

Al cambiar querySelector() por querySelectorAll() no me funciona en ninguno. Sobre lo de usar la librería y dejar de hacerlo, soy algo novato en este tema y tengo un mezclado de lo que he ido recopilando por algunos posts jeje.
  #4 (permalink)  
Antiguo 28/01/2017, 16:14
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: Seleccionar varios elementos con la misma clase

No se trata de hacer
Código Javascript:
Ver original
  1. var elemento1 = document.querySelectorAll(".size1");
Lee la documentación y lo entenderás. Pero antes de nada decide si usar una librería o javascript nativo. Después trabaja en el html. Un elemento en línea <a> no puede ser contenedor de un elemento de bloque <div>
  #5 (permalink)  
Antiguo 29/01/2017, 07:15
 
Fecha de Ingreso: abril-2015
Mensajes: 16
Antigüedad: 9 años
Puntos: 4
Respuesta: Seleccionar varios elementos con la misma clase

Hola mpozo. He conseguido que funcione, gracias por la ayuda.

Sobre lo del elemento <a> conteniendo un elemento <div>. Si es tan mala práctica, ¿Por qué páginas como facebook lo utilizan?
  #6 (permalink)  
Antiguo 29/01/2017, 10:04
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: Seleccionar varios elementos con la misma clase

¿Quién dice que facebook sea un ejemplo de buenas prácticas?
https://developer.mozilla.org/es/doc..._vs._en_bloque
http://www.psdahtmlpasoapaso.com/blo...ne-fundamental
  #7 (permalink)  
Antiguo 29/01/2017, 13:45
Avatar de siddartha23  
Fecha de Ingreso: septiembre-2013
Mensajes: 357
Antigüedad: 10 años, 7 meses
Puntos: 39
Respuesta: Seleccionar varios elementos con la misma clase

En html5 no es mala práctica colocar elementos dentro de una etiqueta <a> siempre y cuando ninguno de esos elementos sea interactivo como por ejemplo colocar otra etiqueta <a> o un botón:

https://www.w3.org/TR/html5/text-level-semantics.html#the-a-element
__________________
velarde23.com - Soluciones Web
  #8 (permalink)  
Antiguo 30/01/2017, 07:54
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: Seleccionar varios elementos con la misma clase

Ya sé algo más de HTML. Habría que plantearse como afecta al SEO, que no siempre va de la mano con las especificaciones de HTML
  #9 (permalink)  
Antiguo 30/01/2017, 12:48
Avatar de siddartha23  
Fecha de Ingreso: septiembre-2013
Mensajes: 357
Antigüedad: 10 años, 7 meses
Puntos: 39
Respuesta: Seleccionar varios elementos con la misma clase

He leído acerca del "depth limit" que tienen los rastreadores web (web crawlers), pero esto tiene que ver con el número de páginas que un robot escanea desde el root de la web. Lo que no encuentro es ningún tipo de información que me diga que el robot al encontrar un enlace va dejar de tomar en cuenta las etiquetas que se encuentran dentro, lo que podría tener sentido tomando en cuenta las antiguas especificaciones, pero no se menciona en ningún lado (o tal vez debo averiguar más)...
__________________
velarde23.com - Soluciones Web

Etiquetas: clase, elementos, forma, funcion, html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:55.