Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/09/2008, 09:51
Avatar de jseros
jseros
 
Fecha de Ingreso: agosto-2008
Ubicación: Bogotá
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 18
Respuesta: Agregar nueva fila a tabla con js

hola hgp147.

Modifique el código de la función transformar y me funcionó:

Código:
function transformar() {
  
  
	// Obtengo la tabla
    var tabla = document.getElementById("tabla");
    
	// Almaceno y modifico la cabecera, a�adiendo el orden y el filtro
	var cab = tabla.rows[0];
	
	if( !datos.length || !datos2.length )
	{
		for (var i=0; i<cab.cells.length; i++) {
			cabecera[i] = cab.cells[i].innerHTML;
			cab.cells[i].innerHTML = (i != seleccionado) ?
				'<a href="javascript:ordenar('+i+')">'+cab.cells[i].innerHTML+'<img src="ord-no.gif" alt="NO" /></a>' :
				(orden[i]? '<a href="javascript:ordenar('+i+')">'+cab.cells[i].innerHTML+'<img src="ord-des.gif" alt="DES" /></a>' :
						   '<a href="javascript:ordenar('+i+')">'+cab.cells[i].innerHTML+'<img src="ord-asc.gif" alt="ASC" /></a>');
			cab.cells[i].innerHTML += '<br /><input type="text" id="filtro'+i+'" class="filtro" maxlength="10" onkeyup="filtro(event, '+i+')" value="'+filtros[i]+'" autocomplete="off"/>';
		}
	}
	else
	{
		datos = [];
		datos2 = [];
	}

	// Guardo los datos de la tabla y marco filas alternas
    for (var i=1; i<tabla.rows.length; i++) {
      if (i%2 == 0) {
        tabla.rows[i].className = "par";
	  }
	  var aux = new Array();
	  var aux2 = new Array();
	  for (var j=0; j<tabla.rows[i].cells.length; j++) {
	    aux[j] = tabla.rows[i].cells[j].innerHTML;
	    aux2[j] = tabla.rows[i].cells[j].id;
	  }
	  datos[datos.length] = new Array(true, aux);
	  datos2[datos2.length] = new Array(true, aux2);
    }
  }
y la función ordenar:

Código:
  function ordenar(i) {
    var tabla = document.getElementById("tabla");
	
	transformar();
	
	// si es la misma col se cambia el sentido
	if (seleccionado == i) {
		orden[seleccionado] = !orden[seleccionado];
	} else {
		orden[seleccionado] = true;
		seleccionado = i;
	}
	
	// Se ordena la tabla y se dibuja
	datos.sort(organizar);
	datos2.sort(organizar);
	dibujarTabla();
  }

Lo que está en rojo fue lo que agregué o cambié

No me gusta mucho ese código, creo que está muy desordenado y hay cosas sin sentido, pero bueno:

1. dos arreglos llamados datos y datos2 que almacenen los datos que se encuentran en el momento en la tabla.

2. estos arreglos se llenan en la función transformar. Esta función solo se ejecuta en el
evento onload, luego con la función ordenar se redibuja la tabla con respecto a los datos que se encuntren en los arreglos. Osea, los que se encontraban cuando se cargo el sitio.

3. Por ello en la función ordenar, puse una llamada a la función transformar, para poder volver a almacenar los datos.

4. En esta última se crean las cabeceras de la fila, es por esto que pongo un verificación del estado de los arreglos, si no hay datos crea las cabeceras y si los hay no crea nada pero reinicia los arreglos. Si no fuera así, cada vez que intente ordenar las columas me adjunta una cebecera.

Espero haberme hecho entender.

Saludos.