Foros del Web » Programando para Internet » Javascript »

ordenar tabla segun columnas

Estas en el tema de ordenar tabla segun columnas en el foro de Javascript en Foros del Web. Saludos a todos los del foro,he probado un script de vuestra pagina pero no funciona.ALGUIEN PUEDE ECHARME UNA MANO: <!-- Ordenar campos de una tabla ...
  #1 (permalink)  
Antiguo 03/09/2003, 11:47
 
Fecha de Ingreso: junio-2003
Mensajes: 102
Antigüedad: 20 años, 10 meses
Puntos: 0
ordenar tabla segun columnas

Saludos a todos los del foro,he probado un script de vuestra pagina pero no funciona.ALGUIEN PUEDE ECHARME UNA MANO:
<!-- Ordenar campos de una tabla segun columna
Cómo puedo ordenar los datos de una tabla dependiendo de cada columna?
Muy sencillo, consta de dos pasos.
1º Añade este Script en el head -->
<HTML>
<HEAD>
<TITLE> Ordenar tabla segun columna </TITLE>
<SCRIPT LANGUAGE="JavaScript">

<!-- Begin
function compare(sVal1, sVal2){
//para cambiar el orden (ascendente o descendente) se debe
//cambiar a negativo el primer 1 y a positivo el segundo, segun convenga
if (sVal1 < sVal2) return 1;
if (sVal1 > sVal2) return -1;
return 0;
}
function setDataType(cValue)
{
// THIS FUNCTION CONVERTS DATES AND NUMBERS FOR PROPER ARRAY
// SORTING WHEN IN THE SORT FUNCTION
var isDate = new Date(cValue);
if (isDate == "NaN")
{
if (isNaN(cValue))
{
// THE VALUE IS A STRING, MAKE ALL CHARACTERS IN
// STRING UPPER CASE TO ASSURE PROPER A-Z SORT
cValue = cValue.toUpperCase();
return cValue;
}
else
{
// VALUE IS A NUMBER, TO PREVENT STRING SORTING OF A NUMBER
// ADD AN ADDITIONAL DIGIT THAT IS THE + TO THE LENGTH OF
// THE NUMBER WHEN IT IS A STRING
var myNum;
myNum = String.fromCharCode(48 + cValue.length) + cValue;
return myNum;
}
}
else
{
// VALUE TO SORT IS A DATE, REMOVE ALL OF THE PUNCTUATION AND
// AND RETURN THE STRING NUMBER
//BUG - STRING AND NOT NUMERICAL SORT .....
// ( 1 - 10 - 11 - 2 - 3 - 4 - 41 - 5 etc.)
var myDate = new String();
myDate = isDate.getFullYear() + " " ;
myDate = myDate + isDate.getMonth() + " ";
myDate = myDate + isDate.getDate(); + " ";
myDate = myDate + isDate.getHours(); + " ";
myDate = myDate + isDate.getMinutes(); + " ";
myDate = myDate + isDate.getSeconds();
//myDate = String.fromCharCode(48 + myDate.length) + myDate;
return myDate ;
}
}
function sortTable(col, tableToSort)
{
var iCurCell = col + tableToSort.cols;
var totalRows = tableToSort.rows.length;
var bSort = 0;
var colArray = new Array();
var oldIndex = new Array();
var indexArray = new Array();
var bArray = new Array();
var newRow;
var newCell;
var i;
var c;
var j;
// ** POPULATE THE ARRAY colArray WITH CONTENTS OF THE COLUMN SELECTED
for (i=1; i < tableToSort.rows.length; i++)
{
colArray[i - 1] = setDataType(tableToSort.cells(iCurCell).innerText) ; //LINEA 76
iCurCell = iCurCell + tableToSort.cols;
}
// ** COPY ARRAY FOR COMPARISON AFTER SORT
for (i=0; i < colArray.length; i++)
{
bArray[i] = colArray[i];
}
// ** SORT THE COLUMN ITEMS
//alert ( colArray );
colArray.sort(compare);
//alert ( colArray );
for (i=0; i < colArray.length; i++)
{ // LOOP THROUGH THE NEW SORTED ARRAY
indexArray[i] = (i+1);
for(j=0; j < bArray.length; j++)
{ // LOOP THROUGH THE OLD ARRAY
if (colArray[i] == bArray[j])
{ // WHEN THE ITEM IN THE OLD AND NEW MATCH, PLACE THE
// CURRENT ROW NUMBER IN THE PROPER POSITION IN THE
// NEW ORDER ARRAY SO ROWS CAN BE MOVED ....
// MAKE SURE CURRENT ROW NUMBER IS NOT ALREADY IN THE
// NEW ORDER ARRAY
for (c=0; c<i; c++)
{
if ( oldIndex[c] == (j+1) )
{
bSort = 1;
}
}
if (bSort == 0)
{
oldIndex[i] = (j+1);
}
bSort = 0;
}
}
}
// ** SORTING COMPLETE, ADD NEW ROWS TO BASE OF TABLE ....
for (i=0; i<oldIndex.length; i++)
{
newRow = tableToSort.insertRow();
for (c=0; c<tableToSort.cols; c++)
{
newCell = newRow.insertCell();
newCell.innerHTML = tableToSort.rows(oldIndex[i]).cells(c).innerHTML;
}
}
//MOVE NEW ROWS TO TOP OF TABLE ....
for (i=1; i<totalRows; i++)
{
tableToSort.moveRow((tableToSort.rows.length -1),1);
}
//DELETE THE OLD ROWS FROM THE BOTTOM OF THE TABLE ....
for (i=1; i<totalRows; i++)
{
tableToSort.deleteRow();
}
}
// End -->
</script>
</HEAD>

<BODY BGCOLOR="#FFFFFF">
<!-- 2º Paso: Crear la tabla
indicar el número de columnas, teniendo cuidado de que no haya colspan -->

<table name="rsTable" id="rsTable" cols=6>
<tr><td><A href="javascript:sortTable(0, rsTable">ID</A></td>
<td><A href="javascript:sortTable(1, rsTable);">Nombre</A></td>
<td><A href="javascript:sortTable(2, rsTable);">Apellidos</A></td>
</tr>
<tr>
<td>DAVID</TD>
<td>GOMEZ</TD>
<td>BLANCO</TD>
</tr>
<tr>
<td>AINOA</TD>
<td>PALOMINO</TD>
<td>BLANCO</TD>
</tr>
<tr>
<td>JOSE</TD>
<td>HIGUERO</TD>
<td>AZUL</TD>
</tr>
</table>
</BODY>
</HTML>

Me da los siguientes errores y no acabo de verlos:
Linea 1 Char 21 Se esperaba )
Linea 76 Char 9 Se requiere un objeto
Linea 1 Char 21 Se esperaba )
  #2 (permalink)  
Antiguo 03/09/2003, 13:24
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Hola dardd.

Tienes un par de errores en estas dos líneas:

Código:
<table name="rsTable" id="rsTable" cols=6>
<tr><td><A href="javascript:sortTable(0, rsTable">ID</A></td>
- Estas usando tres columnas: pon cols="3"
- Cierra el paréntesis luego de la llamada a la función: sortTable(0, rsTable).

Saludos.
  #3 (permalink)  
Antiguo 03/09/2003, 13:41
 
Fecha de Ingreso: junio-2003
Mensajes: 102
Antigüedad: 20 años, 10 meses
Puntos: 0
Gracias kaopectate,no se que haria sin vosotros
  #4 (permalink)  
Antiguo 04/09/2003, 00:38
DIL
 
Fecha de Ingreso: septiembre-2003
Ubicación: Palma de Mallorca
Mensajes: 15
Antigüedad: 20 años, 8 meses
Puntos: 0
Solamente comentar una cosa:

El modelo de objetos que usas para crear la tabla, es un modelo propietario de Internet Explorer.

Si la página va dirigida a usuarios de una intranet, no tendrás problemas, pero si los usuarios pueden acceder a la página desde cualquier navegador, no funcionará en otros que no sean IE.

Respecto al proceso de sort, en caso de que el número de elementos sea grande quizás te interese modificarlo y utilizar el quicksort.

Bueno, al final han sido dos cosas.
  #5 (permalink)  
Antiguo 04/09/2003, 02:37
 
Fecha de Ingreso: junio-2003
Mensajes: 102
Antigüedad: 20 años, 10 meses
Puntos: 0
Gracias DIL,ya lo tenia en cuenta.
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:38.