Foros del Web » Programando para Internet » Javascript »

¿Como ocultar algunas filas de una tabla?

Estas en el tema de ¿Como ocultar algunas filas de una tabla? en el foro de Javascript en Foros del Web. hola! Necesito algo de orientacion para poder ocultar algunas filas de una tabla., especificamente, es un formulario en la cual solicito informacion de su familia, ...
  #1 (permalink)  
Antiguo 10/03/2012, 19:55
 
Fecha de Ingreso: diciembre-2011
Ubicación: Chile
Mensajes: 36
Antigüedad: 12 años, 4 meses
Puntos: 2
¿Como ocultar algunas filas de una tabla?

hola!

Necesito algo de orientacion para poder ocultar algunas filas de una tabla., especificamente, es un formulario en la cual solicito informacion de su familia, hice 10 campos para este fin, pero quiero mostrar solo 3 y poner un boton para que muestre el resto de las filas, en caso de que el usuario necesite mas campos.

Aclaro que de javascript soy novato, trate de adaptar algunas soluciones que encontre en internet pero solo funcionan en caso de 1 fila, no de 7 (que es mi caso)

adjunto lo que llevo hasta el momento:

Código Javascript:
Ver original
  1. function displayRow(){  
  2.     var row = document.getElementById("captionRow");
  3.     for (i=0; i<row.Count; i++){
  4.         if (row[i].style.display == '')  row[i].style.display = 'none';    
  5.         else row[i].style.display = ''; }
  6.     }

(si le quito el for, funciona con una fila, pero tal como esta no funcioan con ninguna :( )

aca, parte de la tabla:

Código HTML:
Ver original
  1. <tr>
  2.             <td>&nbsp;</td>
  3.             <td><strong>Cargas familiares:</strong></td>
  4.             <td>&nbsp;</td>
  5.             <td>&nbsp;</td>
  6.             <td>&nbsp;</td>
  7.             <td>&nbsp;</td>
  8.           </tr>
  9.           <tr>
  10.             <td>&nbsp;</td>
  11.             <td>&nbsp;Sexo</td>
  12.             <td>&nbsp;</td>
  13.             <td>&nbsp;Fecha Nacimiento</td>
  14.             <td>&nbsp;&nbsp;&nbsp;Rut</td>
  15.             <td>&nbsp;</td>
  16.           </tr>
  17.           <tr>
  18.             <td>1</td>
  19.             <td>
  20.             <select name="Scargas" id="Scargas">
  21.             <option value="">Seleccione una opción</option>
  22.             <option value="Hombre">Hombre</option>
  23.             <option value="Mujer">Mujer</option>
  24.             </select>
  25.             </td>
  26.             <td>&nbsp;</td>
  27.             <td><input type="text" name="nacimiento" id="nacimiento2" /></td>
  28.             <td><input type="text" name="strRut1" id="rut" /></td>
  29.             <td>&nbsp;</td>
  30.           </tr>
  31.           <tr>
  32.             <td>2</td>
  33.             <td><select name="Scargas2" id="Scargas">
  34.               <option value="">Seleccione una opción</option>
  35.               <option value="Hombre">Hombre</option>
  36.               <option value="Mujer">Mujer</option>
  37.             </select></td>
  38.             <td>&nbsp;</td>
  39.             <td><input type="text" name="nacimiento2" id="nacimiento3" /></td>
  40.             <td><input type="text" name="strRut2" id="rut" /></td>
  41.             <td>&nbsp;</td>
  42.           </tr>
  43.           <tr>
  44.             <td>3</td>
  45.             <td><select name="Scargas3" id="Scargas">
  46.               <option value="">Seleccione una opción</option>
  47.               <option value="Hombre">Hombre</option>
  48.               <option value="Mujer">Mujer</option>
  49.             </select></td>
  50.             <td>&nbsp;</td>
  51.             <td><input type="text" name="nacimiento3" id="nacimiento4" /></td>
  52.             <td><input type="text" name="strRut3" id="rut" /></td>
  53.             <td>&nbsp;</td>
  54.           </tr>
  55.           <tr>
  56.             <td>&nbsp;</td>
  57.             <td> </td>
  58.             <td>&nbsp;</td>
  59.             <td>&nbsp;</td>
  60.             <td>&nbsp;</td>
  61.             <td>&nbsp;</td>
  62.           </tr>
  63.           <tr id="captionRow">
  64.             <td>4</td>
  65.             <td><select name="Scargas4" id="Scargas">
  66.               <option value="">Seleccione una opción</option>
  67.               <option value="Hombre">Hombre</option>
  68.               <option value="Mujer">Mujer</option>
  69.             </select></td>
  70.             <td>&nbsp;</td>
  71.             <td><input type="text" name="nacimiento4" id="nacimiento5" /></td>
  72.             <td><input type="text" name="strRut4" id="rut" /></td>
  73.             <td>&nbsp;</td>
  74.           </tr>
  75.           <tr id="captionRow">
  76.             <td>5</td>
  77.             <td><select name="Scargas5" id="Scargas">
  78.               <option value="">Seleccione una opción</option>
  79.               <option value="Hombre">Hombre</option>
  80.               <option value="Mujer">Mujer</option>
  81.             </select></td>
  82.             <td>&nbsp;</td>
  83.             <td><input type="text" name="nacimiento5" id="nacimiento6" /></td>
  84.             <td><input type="text" name="strRut5" id="rut" /></td>
  85.             <td>&nbsp;</td>
  86.           </tr>
  87.           <tr id="captionRow">
  88.             <td>6</td>
  89.             <td><select name="Scargas6" id="Scargas">
  90.               <option value="">Seleccione una opción</option>
  91.               <option value="Hombre">Hombre</option>
  92.               <option value="Mujer">Mujer</option>
  93.             </select></td>
  94.             <td>&nbsp;</td>
  95.             <td><input type="text" name="nacimiento6" id="nacimiento7" /></td>
  96.             <td><input type="text" name="strRut6" id="rut" /></td>
  97.             <td>&nbsp;</td>
  98.           </tr>
  99.           <tr id="captionRow">
  100.             <td>7</td>
  101.             <td><select name="Scargas7" id="Scargas">
  102.               <option value="">Seleccione una opción</option>
  103.               <option value="Hombre">Hombre</option>
  104.               <option value="Mujer">Mujer</option>
  105.             </select></td>
  106.             <td>&nbsp;</td>
  107.             <td><input type="text" name="nacimiento7" id="nacimiento8" /></td>
  108.             <td><input type="text" name="strRut7" id="rut" /></td>
  109.             <td>&nbsp;</td>
  110.           </tr>
  111.           <tr id="captionRow">
  112.             <td>8</td>
  113.             <td><select name="Scargas8" id="Scargas">
  114.               <option value="">Seleccione una opción</option>
  115.               <option value="Hombre">Hombre</option>
  116.               <option value="Mujer">Mujer</option>
  117.             </select></td>
  118.             <td>&nbsp;</td>
  119.             <td><input type="text" name="nacimiento8" id="nacimiento9" /></td>
  120.             <td><input type="text" name="strRut8" id="rut" /></td>
  121.             <td>&nbsp;</td>
  122.           </tr>
  123.           <tr id="captionRow">
  124.             <td>9</td>
  125.             <td><select name="Scargas9" id="Scargas">
  126.               <option value="">Seleccione una opción</option>
  127.               <option value="Hombre">Hombre</option>
  128.               <option value="Mujer">Mujer</option>
  129.             </select></td>
  130.             <td>&nbsp;</td>
  131.             <td><input type="text" name="nacimiento9" id="nacimiento10" /></td>
  132.             <td><input type="text" name="strRut9" id="rut" /></td>
  133.             <td>&nbsp;</td>
  134.           </tr>
  135.           <tr id="captionRow">
  136.             <td>10</td>
  137.             <td><select name="Scargas10" id="Scargas">
  138.               <option value="">Seleccione una opción</option>
  139.               <option value="Hombre">Hombre</option>
  140.               <option value="Mujer">Mujer</option>
  141.             </select></td>
  142.             <td>&nbsp;</td>
  143.             <td><input type="text" name="nacimiento10" id="nacimiento11" /></td>
  144.             <td><input type="text" name="strRut10" id="rut" /></td>
  145.             <td>&nbsp;</td>
  146.           </tr>

cualquier sugerencia es bienvenida :D
  #2 (permalink)  
Antiguo 10/03/2012, 22:34
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: ¿Como ocultar algunas filas de una tabla?

¡buenas!
el primer detalle que salta a la vista es que repites el ID en varios elementos. por norma, el ID no se puede repetir. y cuando lo haces, getElementById solo encuentra uno. hay varias formas que puedes optar para lograr el mismo resultado:
  • seleccionar elementos por clases (getElementsByClassName) y luego manipular el estilo. la selección por clase te devuelve un grupo de elementos.
  • agrupar los campos extras en distintos elementos. por ejemplo, una tabla puede tener más de un cuerpo (TBODY). en tu caso tendrías dos cuerpos, el primero es visible y el segundo se mantiene oculto. cuando el usuario lo requiera, muestras el segundo cuerpo modificando los estilos.
  • crear filas a petición del usuario. el concepto es bien distinto. no es lo mismo crear que mostrar algo oculto. la ventaja de crear las filas es que el usuario puede solicitar una cantidad variable de filas según las que necesite. en cambio, cuando tu muestras algo oculto seguramente ya habrá una cantidad definida por tí. básicamente consiste en clonar el DOM de un elemento o recrear todos los elementos que componen una fila.
hay otras formas adicionales pero no tan cómodas, ya sea por discrepancia del navegador (modificar la hoja de estilo a través del DOM) o porque tiene efectos secundarios no deseados (innerHTML, código html que puedes manipular en forma de string). en fin, es cuestión que decidas cuál método usar. de momento explico más o menos como son los últimos dos métodos de la lista: el segundo porque es el más fácil de implementar y el tercero por su habilidad de dar el control al usuario de determinar cuantas filas crear.

TBODY
Código:
<table>
<tbody><!-- filas visibles --></tbody>
<tbody id="..." style="..."><!-- filas ocultas --></tbody>
</table>
nótese el esquema del código html. simplemente tomas el elemento TBODY por su ID (getElementById) y modificas la propiedad display de style.

clonar filas
es un poquito más complicado porque requiere cierta atención. por ejemplo, tu puedes crear todos los elementos de forma individual (createElement) pero resulta poco práctico dado la cantidad de código a escribir (mucho createElement, createTextNode y appendChild). por tanto, lo más fácil es clonar un elemento ya existente y modificar ciertos datos si fuera necesario: nombre de los campos, algún texto, valor de los campos, etc. básicamente consiste en tomar la referencia de una fila (getElementById o table.rows), invocar el método cloneNode y agregar a la tabla con appendChild.
Código:
<table id="..."><!-- una o varias filas a mostrar --></table>

// en la función asociada al botón que pulsa el usuario;
var table  = document.getElementById(...).firstChild;
var clone = table.rows[0].cloneNode(true);
table.appendChild(clone);
si quieres manipular los campos y/o elementos del clon, debes manejarte por medio del DOM. te recomiendo que leas acerca de HTML DOM para que te familiarices con los conceptos básicos. no lo he leido pero confío que sea útil, kusor.net.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 10/03/2012 a las 22:48
  #3 (permalink)  
Antiguo 11/03/2012, 03:39
 
Fecha de Ingreso: julio-2005
Mensajes: 204
Antigüedad: 18 años, 8 meses
Puntos: 1
Respuesta: ¿Como ocultar algunas filas de una tabla?

No vi el código pero desde el html ponele como oculto y desde el javascript lo habilitas cuando sea necesario con display

saludos
  #4 (permalink)  
Antiguo 11/03/2012, 06:54
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 21 años, 5 meses
Puntos: 317
Respuesta: ¿Como ocultar algunas filas de una tabla?

Hola todos.

Me quedé pensando en un detalle, pero lo menciono al final, antes quería comentar que en verdad la respuesta de zerokilled es la más ajustada y descriptiva, y cubre mayor cantidad de posibilidades a futuro si se usa DOM para crear y eliminar filas.
Pero la respuesta de elburdel (que está incluída en la anterior) me parece más acorde al planteo, dando por seguro que la cantidad de filas a agregar tiene un número límite.

Bien, lo que me quedé pensando es de dónde salió eso de replicar id's en la tabla. Está mal hecho, panchompc, pero creo adivinar que lo viste en algún lado, y no lo interpretaste.

Los id's se pueden repetir en una tabla, siempre que sea en la misma columna de td's. Esto permite darles formato justamente como columna, en vertical, ya que las etiquetas tr separan por fila (en tu ejemplo hay un mix de identificadores en la misma columna!).

No sé si será válido, y existiendo <colgroup span="n"> <col> <col> </colgroup> no creo que tengan mucho sentido, pero los navegadores lo aceptan. Y creo que hay otro caso ma´s en que se pueden repetir ... pero ahora no me acuerdo.
  #5 (permalink)  
Antiguo 11/03/2012, 16:44
 
Fecha de Ingreso: diciembre-2011
Ubicación: Chile
Mensajes: 36
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: ¿Como ocultar algunas filas de una tabla?

Hola!,
Al final lo hice con Jquery :

Lo dejo para otros posibles interesados

Lo que hice:

1º Ponerle class=captionRow a los <tr> que queria esconder, quedando de esta manera: <tr id="captionRow">

2º crear 2 <div> que funcionan como botones, declarando 2 clases nuevas (ocultar/mostrar)

Código HTML:
Ver original
  1. <div class="mostrar">Mostrar más campos</div><div class="ocultar">Ocultar </div>

el CSS de los div

Código CSS:
Ver original
  1. .mostrar { height:25px; cursor:pointer; float:left; margin-left:5px;}
  2. .ocultar { height:25px; cursor:pointer; float:left; margin-left:5px;}

3º Controlar los display y las acciones con jQuery:

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     //escondo elementos
  3.  $(".captionRow").hide();//escondo los elementos de la tabla
  4.  $(".ocultar").hide();//escondo el boton 'ocultar'
  5.  
  6.     //MOSTRAR El RESTO DE TABLA
  7.  $(".mostrar").click(function(){
  8.      $(".captionRow").show("slow");//muestro resto de la tabla
  9.      $(".ocultar").show();//muestro el boton 'Ocultar'
  10.      $(".mostrar").hide();//escondo el boton 'Mostrar'
  11.      
  12.      });
  13.  
  14.     //OCULTAR EL RESTO DE LA TABLA
  15.  $(".ocultar").click(function(){
  16.      $(".captionRow").hide("slow");//escondo el resto de la tabla
  17.      $(".ocultar").hide();//escondo el boton 'Ocultar'
  18.      $(".mostrar").show();//muestro el botom 'Mostrar'
  19.      });
  20. });

De todas maneras, MUCHAS GRACIAS a todos por las ayudas y sugerencia, deje en favoritos el doc. sobre BOM para leerlo con calma en la semana :)

Etiquetas: filas, formulario, funcion, input, botones
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:53.