Foros del Web » Programando para Internet » Javascript »

Ordenacion tabla

Estas en el tema de Ordenacion tabla en el foro de Javascript en Foros del Web. Buenas, voy avanzando en la programacion javascript. He conseguido cosas interesantes y ahora me gustaria poder ordenar tablas sin necesidad de acceder al servidor cada ...
  #1 (permalink)  
Antiguo 24/07/2007, 07:02
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Ordenacion tabla

Buenas, voy avanzando en la programacion javascript. He conseguido cosas interesantes y ahora me gustaria poder ordenar tablas sin necesidad de acceder al servidor cada vez que desee ordenarlas.
Sigo el metodo bubble sort ya que es facil de implementar pero aun asi no consigo hacerlo funcionar.

Columna = entero que representa la columna que quiero ordenar (0=1a columna,1=2a columna,...).
Tabla = Tabla que quiero ordenar.

Código PHP:
function ordenar(columna,tabla) { 
  
nMax=tabla.getElementsByTagName('tr').length
  
alert("empiezo a ordenar, numero de filas: "+nMax); 
  
i=1
  for(
i=1;i<nMax;i++) { 
    for(
j=0;j<nMax-1;j++) {  
      
alert("i: "+i+"j: "+j); 
      if(
tabla.getElementsByTagName('tr')[j].getElementsByTagName('input')){ 
        
alert("input type = "+tabla.getElementsByTagName('tr')[j].getElementsByTagName('input')[columna].type); 
        if(
tabla.getElementsByTagName('tr')[j].getElementsByTagName('input')[columna].type=="text"){ 
          
alert(tabla.getElementsByTagName('tr')[j].getElementsByTagName('input')[columna].value); 
          
alert(tabla.getElementsByTagName('tr')[j+1].getElementsByTagName('input')[columna].value); 
          if(
tabla.getElementsByTagName('tr')[j].getElementsByTagName('input')[columna].value 
             
tabla.getElementsByTagName('tr')[j+1].getElementsByTagName('input')[columna].value) { 
             
temp=tabla.getElementsByTagName('tr')[j].innerHTML
             
alert(temp); 
             
tabla.getElementsByTagName('tr')[j].innerHTML=tabla.getElementsByTagName('tr')[j+1].innerHTML;
             
tabla.getElementsByTagName('tr')[j+1].innerHTML=temp
          } 
        } 
      }  
    } 
  } 

EDIT: La tabla es una tabla de inputs de tipo texto y checkbox. El algoritmo comprueba que el input sea de tipo texto
El codigo funciona bien hasta la hora de intercanviar el codigo, mi pregunta es si se puede hacer la siguiente instruccion:
tabla.getElementsByTagName('tr')[j].innerHTML=tabla.getElementsByTagName('tr')[j+1].innerHTML;
Ya que es donde me da el error.

Gracias como siempre!

PD: He buscado en el foro y he visto que hace un tiempo alguien dio el siguiente link http://slayeroffice.com/code/tableSort.html pero es demasiado liado para mi...

Última edición por GoRaXaN; 24/07/2007 a las 07:08
  #2 (permalink)  
Antiguo 24/07/2007, 08:24
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: Ordenacion tabla

Alguna ayuda, consejo? :(

Se trata de intercanviar una fila con la siguiente si la primera es mayor que la siguiente. En cada iteracion del bucle mas exterior se consigue ordenar una fila (en concreto la ultima fila), es lento pero facil de entender y aplicar.
  #3 (permalink)  
Antiguo 26/07/2007, 03:53
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Ordenacion tabla

Te explico un poco lo que hace el código de la página que has posteado.

Básicamente lo hace con DOM. Primero clona el nodo <tr> de la fila, y lo guarda en un array (según el orden ya ordenado).
Código PHP:
for(i=0;i<order.length;i++) mDiv[mDiv.length] = document.getElementsByTagName("tr")[order[i][1]].cloneNode(true); 
Luego lo que hace es insertar esa fila antes de la última fila (document.getElementsByTagName("tr").length que yo sepa no es un índice válido, luego la referencia falla -al final de la tabla?)
Código PHP:
document.getElementsByTagName("tbody")[0].insertBefore(mDiv[z],document.getElementsByTagName("tr")[document.getElementsByTagName("tr").length]); 
Después finaliza eliminando ciertas filas, que supongo que estarán duplicadas.


Podrías coger la idea de mover nodos de filas, creo que sería lo más óptimo e inteligente.

De hecho podrías hacer un sort(f) directamente, y en la función f ya movemos los nodos. Habría que hacer una función para intercambiar filas entre sí, y ya estaría todo hecho.



Sobre tu duda de si se puede hacer
tabla.getElementsByTagName('tr')[j].innerHTML=tabla.getElementsByTagName('tr')[j+1].innerHTML;
pues te diré que no lo sé, aunque no pinta mal en teoría, en la práctica, como dices tú, puede ser un poco bestia.



Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 10:48.