Foros del Web » Programando para Internet » Javascript »

¿Acceder al elemento padre?

Estas en el tema de ¿Acceder al elemento padre? en el foro de Javascript en Foros del Web. Buenas Estoy manejando una estructura de arbol con javascript y quería que al quitarl el tick del checkbox de un hijo, se les quite también ...
  #1 (permalink)  
Antiguo 19/05/2009, 04:35
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
¿Acceder al elemento padre?

Buenas

Estoy manejando una estructura de arbol con javascript y quería que al quitarl el tick del checkbox de un hijo, se les quite también a los checkbox de sus padres ( o carpetas)

He probado cosas, pero no me da resultado.
La estructura sería tipo lista, algo como esto:


Código HTML:
<ul>
   <li>Carpeta Pepe</li>
   <li>Carpeta Juan
           <ul>
               <li> Subcarpeta Juan Perez
                     <ul>
                          <li>Archivo de Juan Perez</li>
                     </ul>
               </li>
          </ul>
   </li>
</ul> 
Es decir, que yo por ahora tengo hecho que seleccionando un checkbox en Carpeta Juan se seleccione tambien en Subcarpeta Juan Perez y Archivo de Juan Perez.
Y lo que intento ahora es que al deseleccionar Archivo de Juan Perez se deseleccionen todos sus padres.

¿como podría hacerlo?
He probado con nodo.parentNode, pero parece que no tira...

Saludos

Última edición por IMAC/; 19/05/2009 a las 09:07
  #2 (permalink)  
Antiguo 19/05/2009, 07:19
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: ¿Acceder al elemento padre?

parentNode debe funcionar. Usas por ejemplo el evento change del checkbox, algo parecido a:

Código javascript:
Ver original
  1. var chB = document.getElementById('idDeTuCheckbox');
  2. chB.onchange = function(){
  3.      if(this.checked = 'checked'){
  4.           this.parentNode.getElementById('idChecboxdeParentNode').cheked = '';
  5.      }else{
  6.           this.parentNode.getElementById('idChecboxdeParentNode').cheked = 'checked';
  7.      }
  8. }

Hace tiempo que no trabajo con checkbox por lo que no estoy muy fresco en el asunto de comprobar si está checado o no, pero la idea es esa.
__________________
twitter: @imbuzu

Última edición por buzu; 19/05/2009 a las 13:14
  #3 (permalink)  
Antiguo 19/05/2009, 09:03
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: ¿Acceder al elemento padre?

Cita:
Iniciado por buzu Ver Mensaje
parentNode debe funcionar. Usas por ejemplo el evento change del checkbox, algo parecido a:

Código javascript:
Ver original
  1. var chB = document.getElementById('idDeTuCheckbox');
  2. chB.onchange = function(){
  3.      if(this.checked = 'checked'){
  4.           this.parentNode.getElementById('idChecboxdeParentNode').cheked = '';
  5.      }else{
  6.           this.parentNode.getElementById('idChecboxdeParentNode').cheked = 'checked';
  7.      }
  8. }

Hace tiempo que no trabajo con checkbox por lo que no estoy muy fresco en el asunto de comprovar si está checado o no, pero la idea es esa.
Bueno, se me olvidó mencionar que no se el número de padres que puede haber. Es decir, que debería de coger varios padres (no se cuantos), todos los que haya por arriba.

Estoy usando un script que me coje todos los HIJOS con checkbox que hay por debajo de un LI, pero no se como hacer lo contrario...

Es decir, no se me ocurre qué puedo hacer para quedarme solo con los padres de un hijo...


Código javascript:
Ver original
  1. var padreDIV=chk;
  2.  
  3.    //este bucle son cosas mias, que hay más cosas dentro de cada <li> (divs, checkbox...etc)
  4. //que me tengo que ir saltando hasta llegar al LI padre
  5.   while( padreDIV.nodeType==1 && padreDIV.tagName.toUpperCase()!="LI" ){
  6.         padreDIV=padreDIV.parentNode;
  7.   }
  8.  
  9.     //ahora que padreDIV es el DIV, cogeremos todos sus checkboxes
  10.     var padreDIVinputs=padreDIV.getElementsByTagName("input");
  11.     for(var i=0; i<padreDIVinputs.length; i++) {
  12.         if( padreDIVinputs[i].getAttribute("type")=="checkbox" ){
  13.             padreDIVinputs[i].checked = chk.checked;
  14.         }
  15.     }

PD: he modificado el código HTML que puse en el primer post. Se me olvidaron unos cuantos <ul>
  #4 (permalink)  
Antiguo 19/05/2009, 09:57
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: ¿Acceder al elemento padre?

Hola:

Solo existe un nodo padre, si te refieres a algún ancestro, ya se trataría de parentNode.parentNode...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 19/05/2009, 13:18
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: ¿Acceder al elemento padre?

bueno, eso es un problema. Si no sabes cuantos nodos tienes que subir, corres el peligro de subir hasta llegar a la raíz del documento. Un opción sería asignarle una clase a los niveles de hasta arriba, por ejemplo:
Código html:
Ver original
  1. <ul>
  2.    <li class="topFolder">Carpeta Pepe</li>
  3.    <li class="topFolder">Carpeta Juan
  4.            <ul>
  5.                <li> Subcarpeta Juan Perez
  6.                      <ul>
  7.                           <li>Archivo de Juan Perez</li>
  8.                      </ul>
  9.                </li>
  10.           </ul>
  11.    </li>
  12. </ul>

Luego subes uno por uno los nodos tal como lo sugiere caricatos (hola) y por cada vez que subas checas si la clase del padre es topFolder. Si es topFolder, entonces ahí te detienes.

Espero que te sirvan mis sugerencias.
__________________
twitter: @imbuzu
  #6 (permalink)  
Antiguo 19/05/2009, 15:49
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: ¿Acceder al elemento padre?

Cita:
Iniciado por buzu Ver Mensaje
bueno, eso es un problema. Si no sabes cuantos nodos tienes que subir, corres el peligro de subir hasta llegar a la raíz del documento. Un opción sería asignarle una clase a los niveles de hasta arriba, por ejemplo:
Código html:
Ver original
  1. <ul>
  2.    <li class="topFolder">Carpeta Pepe</li>
  3.    <li class="topFolder">Carpeta Juan
  4.            <ul>
  5.                <li> Subcarpeta Juan Perez
  6.                      <ul>
  7.                           <li>Archivo de Juan Perez</li>
  8.                      </ul>
  9.                </li>
  10.           </ul>
  11.    </li>
  12. </ul>

Luego subes uno por uno los nodos tal como lo sugiere caricatos (hola) y por cada vez que subas checas si la clase del padre es topFolder. Si es topFolder, entonces ahí te detienes.

Espero que te sirvan mis sugerencias.
Muchas gracias, algo así había pensado también, a ver si puedo hacerlo... ;)

Sigo admitiendo más posibilidades si tienen lugar ;)
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:54.