Foros del Web » Programando para Internet » Node.js »

ParentNode en array

Estas en el tema de ParentNode en array en el foro de Node.js en Foros del Web. Hola foreros! Estoy intentando hacer un array con todos los clases de cada padre del "this". Es decir: Código HTML: <div class= "hola" > <div ...
  #1 (permalink)  
Antiguo 08/11/2009, 16:02
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 7 meses
Puntos: 19
ParentNode en array

Hola foreros!

Estoy intentando hacer un array con todos los clases de cada padre del "this". Es decir:

Código HTML:
<div class="hola">
         <div class="adios">
                     <div class="yo_soy">
                     </div>
         </div>
</div> 
¿Como podria?, es decir, tener un array con las clases del padre de yo_soy

Código PHP:
array_padres(0)='hola';
array_padres(1)='adios'
He intentado hacerlo con:

this.parentNode.className siendo this el elemento de clase "yo_soy", pero no se me ocurria como hacer el bucle para meterlos en un array.

¿Como lo hariais?
  #2 (permalink)  
Antiguo 08/11/2009, 16:16
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, 6 meses
Puntos: 1485
Respuesta: ParentNode en array

en el bucle, el mecanismo que funciona como iteracion seria controlado por elemento padre. por ejemplo:
Código:
var array = [];
for(var elem = this; elem; elem = this.parentNode){
// aqui va tu codigo que determina si el padre contiene una clase;
}
ahora bien, este bucle se extiende hasta el nodo mas alto de la jerarquia DOM, o sea hasta el objeto document. si quieres controlar hasta donde se extiende, necesitaras de alguna forma determinarlo. una alternativa es teniendo de antemano la referencia de uno de los elementos padre del elemento actual. luego, en el cuerpo del bucle compara si el elemento en iteracion es igual al elemento que tienes como referencia. si es cierto, rompes el bucle con break;.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 08/11/2009, 17:32
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 7 meses
Puntos: 19
Respuesta: ParentNode en array

Hola zerokilled,

He intentado usar tu codigo, pero no se por que no me identifica ninguna clase y el bucle no para de repetirse.

Yo activo esta funcion cuando alguien hace focus sobre un input. Y deseaba que identificara cual es su objeto padre mas superior con una determinada clase para colorearlo.
Código PHP:
var form_focus=function()
    {
            var array = [];
             for(var 
elem thiselemelem this.parentNode)
          {
        
alert('voy a mirar tu clase');
        if(
elem.className=='form_fieldset')
            {
                
alert('tienes la clase adecuada!');
                
colorFade(elem.id,'background','ffffff','003366');
            return 
false;
                 }
           }
         } 
¿Que hago mal?
  #4 (permalink)  
Antiguo 08/11/2009, 17:46
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, 6 meses
Puntos: 1485
Respuesta: ParentNode en array

¿podrias poner un ejemplo del codigo html? adicional, ¿como estas invocando la funcion?
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 09/11/2009, 09:43
 
Fecha de Ingreso: julio-2009
Mensajes: 42
Antigüedad: 15 años, 3 meses
Puntos: 3
Respuesta: ParentNode en array

Creo que tus problemas podrian set los siguientes
1- no estas estableciendo una condicion de corte para tu padre, recuerda que el padre del div 'hola' es el body y luego vas a pasar a preguntar por el padre del body y asi sucesivamente, creo q esta es la causa de tu ciclo infinito...
2- la propagacion de eventos si no detienes la propagacion el evento que ejecutes sobre el div mas profundo se propagara hacia arriba de esta forma tu funcion se ejecutara 3 veces consecutivas; la primera para los divs yo_soy adios y hola, la siguienete para adios y hola y la ultima para yo soy.

te dejo un codigo que sifunciona y creo q hace exactamente lo que buscas...

var form_focus=function(evt)
{
evt.stopPropagation(); //aca detengo la propagacion del evento

var array = [];
elem=this;

//el ciclo solo va para los divs

while(elem && elem.nodeName=='DIV')
{
alert(elem.className);
array.push(elem.className);
elem=elem.parentNode;

}
}



con este codigo asigno al evento onclick de cada div la funcion form_focus

<script>
var elms=document.getElementsByTagName("div");
for (i in elms)
{
alert(elms[i].nodeName);
if(elms[i].nodeName=='DIV')elms[i].onclick=form_focus;
}
</script>
  #6 (permalink)  
Antiguo 13/11/2009, 13:20
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 7 meses
Puntos: 19
Respuesta: ParentNode en array

hola kbmaster,

Muchas gracias por el codigo! ha cumplido su funcion, jeje.

Gracias de nuevo! :)
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 12:46.