Foros del Web » Programando para Internet » Javascript »

Cambiar orden de un <ul> con JS o Jquery

Estas en el tema de Cambiar orden de un <ul> con JS o Jquery en el foro de Javascript en Foros del Web. Hola, pues como dice el título. Quisiera hacer eso. Es decir, tengo una lista y que al dar clic sobre un botón cambie el orden ...
  #1 (permalink)  
Antiguo 28/03/2016, 13:49
 
Fecha de Ingreso: marzo-2016
Mensajes: 1
Antigüedad: 8 años
Puntos: 0
Pregunta Cambiar orden de un <ul> con JS o Jquery

Hola, pues como dice el título. Quisiera hacer eso. Es decir, tengo una lista y que al dar clic sobre un botón cambie el orden de la misma:

Orden inicial:
Código:
<ul>
    <li>A</li>
    <li>B</li>
    <li>C</li>
</ul>
<button>Cambiar orden</button>
Orden nuevo:

Código:
<ul>
    <li>C</li>
    <li>B</li>
    <li>A</li>
</ul>
<button>Cambiar orden</button>
Agradecería bastante que me ayuden c:
  #2 (permalink)  
Antiguo 28/03/2016, 15:30
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Cambiar orden de un <ul> con JS o Jquery

Hola:

Cargar la librería es una carga adicional... así que sin duda la primera opción es la mejor..

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 29/03/2016, 09:00
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Cambiar orden de un <ul> con JS o Jquery

Has de trabajar con insertbefore() https://developer.mozilla.org/es/doc.../insertarAntes
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #4 (permalink)  
Antiguo 31/03/2016, 00:56
 
Fecha de Ingreso: junio-2004
Mensajes: 621
Antigüedad: 19 años, 10 meses
Puntos: 25
Información Respuesta: Cambiar orden de un <ul> con JS o Jquery

Lo primero es que cuando hagamos click sobre el botón, se llame a una función que vamos a llamar sort();

Código:
var button = document.querySelector("button");
button.addEventListener("click", function(){
	sort();
})
Esta función se encargará de obtener todos los elementos <li> y de ordenarlos.

Para ordenarlos usará otra función compare(a,b), donde a y b serán dos elementos LIs, por lo que tendremos que comparar su contenido para saber que LI va antes que otro. De esta forma que devolverá -1 cuando el contenido de a < b, 1 al contrario, y 0 si son iguales.

Código:
function compare(a,b){
  if (a.textContent < b.textContent) {
    return -1;
  } else if (a.textContent > b.textContent) {
    return 1;
  } else {
    return 0;
  }
}
De esta forma, yo puedo llamar al método de los arrays sort() pasándole la función compare como argumento.

Código:
array_ordenado = un_array.sort(compare)
Aquí el problema es que document.querySelectorAll("li"); no devuelve un array si no un NodeList, que se parece mucho a un array, pero no tiene métodos propios de estos como: indexOf(), sort(), o reverse(), que nos pueden ser útiles en tu caso.

Pero eso, lo podemos solventar con:
Código:
var arrayLIs = Array.prototype.slice.call(nodeList);
Donde el resultado ya es un array y por tanto podemos ordenarlo, sort(), o invertirlo reverse().

Y quedaría así:
Código:
function sort(){
  var nodeList = document.querySelectorAll("li");
  var arrayLIs = Array.prototype.slice.call(nodeList);
  var objUL = document.querySelector("ul");
  if (!isAsc){
    arrayLIs = arrayLIs.sort(compare);
    isAsc = true;
  } else {
    arrayLIs = arrayLIs.reverse();
    isAsc = false;
  }
  objUL.innerHTML = "";
  for (var i = 0; i < arrayLIs.length; i++) {
    objUL.appendChild(arrayLIs[i]);
  }
}
Con jQuery, desde luego es mucho más fácil, pero he preferido hacerlo en JavaScript puro y duro, porque luego es que parece que se nos olvida el estándar.

He dejado el código en un "fiddle", por si quieres trastear.
https://jsfiddle.net/jjimenezt/xg21ab3r/

Espero haber sido lo suficientemente didáctico.

Un saludo
__________________
eContento
- Mis artículos y tutoriales
- Mis jsfiddles

Etiquetas: jquery, js, orden
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 22:24.