Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Leguim en 20 Agosto 2021, 22:17 pm



Título: [Pregunta]: ¿Cómo evito esto al usar .prepend() en jQuery?
Publicado por: Leguim en 20 Agosto 2021, 22:17 pm
Cuando uso .prepend(); para agregar un fragmento de HTML lo que pasa es que me modifica las posiciones del elemento.

Es decir:

HTML
Código
  1. <div id="elementos"></div>
  2.  

javascript/JQUERY
Código
  1. $('#elementos').prepend('<div class="elemento">ELEMENTO 1</div>'); // esperaría que esto tuviera la posición 0
  2.  
  3. $('#elementos').prepend('<div class="elemento">ELEMENTO 2</div>'); // esperaría que esto tuviera la posición 1
  4.  
  5. $('#elementos').prepend('<div class="elemento">ELEMENTO 3</div>'); // esperaría que esto tuviera la posición 2
  6.  

Pero si accedo a los elementos ocurre que va desde el 0 hasta el 2 y no desde el 2 hasta el 0, entonces no hay manera de evitar que vaya agregando estas posiciones de menor a mayor y sí de mayor a menor?

Código
  1. document.querySelectorAll('.elemento')[0].style.opacity = 0.5; // esperaría que modifique al ELEMENTO 1 pero modificará al ELEMENTO 3
  2.  


Título: Re: [Pregunta]: ¿Cómo evito esto al usar .prepend() en jQuery?
Publicado por: engel lex en 20 Agosto 2021, 22:35 pm
estás usando la función equivocada, prepend es "pre append" es decir insertar antes, esto lo que hace es que cada ver que insertas algo, lo inserta en la cabeza en lugar de la cola, ej.:

Código:
lista = []
prepend(1)
prepend(2)
prepend(3)

lista -> [3,2,1]

tu buscas es la función append que es simplemente "insertar" y por defecto inserta al final, ej.:

Código:
lista = []
apend(1)
apend(2)
apend(3)

lista -> [1,2,3]


 ;D me parece curioso que te hayas en programación dado primero con prepend que append, más bien usualmente la duda es "como uso append para agregar al inicio?"


Título: Re: [Pregunta]: ¿Cómo evito esto al usar .prepend() en jQuery?
Publicado por: MinusFour en 20 Agosto 2021, 22:37 pm
Lo más sencillo sería que solo cambiarás el orden de las instrucciones pero puedes agregar todos los elementos en una sola instrucción:

Código
  1. $('#elementos').prepend([
  2.    '<div class="elemento">ELEMENTO 1</div>',
  3.    '<div class="elemento">ELEMENTO 2</div>',
  4.    '<div class="elemento">ELEMENTO 3</div>'
  5. ]);

Si #elementos está vacio también puedes usar .append.


Título: Re: [Pregunta]: ¿Cómo evito esto al usar .prepend() en jQuery?
Publicado por: Leguim en 20 Agosto 2021, 22:39 pm
Ya lo solucioné!

xD (( necesitaba usar prepend y no append por un tema de como se ve visualmente, quiero que inicie arriba pero no quería que me "rompiera" las posiciones que estaba usando.

Lo conseguí con esta formula por si las dudas a alguien le sirva:

Código
  1. let Q = document.querySelectorAll('.elemento').length;
  2. let X = 1; // posición que se quiere usar
  3. X = Q - X - 1;
  4.  

Gracias!


Título: Re: [Pregunta]: ¿Cómo evito esto al usar .prepend() en jQuery?
Publicado por: engel lex en 20 Agosto 2021, 22:46 pm
claro tu problema es que querías que organize visualmente de una manera y en JS inversa, tambien pudiste invertirlo con una regla de css ya que el es quien se encarga de lo visual

ejemplo
Código:
    display: flex;

    /* según el caso  */
    /* 1: */
    flex-direction: row-reverse;

    /* 2: */
    flex-direction: column-reverse;


Título: Re: [Pregunta]: ¿Cómo evito esto al usar .prepend() en jQuery?
Publicado por: Leguim en 21 Agosto 2021, 01:12 am
claro tu problema es que querías que organize visualmente de una manera y en JS inversa, tambien pudiste invertirlo con una regla de css ya que el es quien se encarga de lo visual

ejemplo
Código:
    display: flex;

    /* según el caso  */
    /* 1: */
    flex-direction: row-reverse;

    /* 2: */
    flex-direction: column-reverse;

También esa es buena!
No la conocía.