Foros del Web » Programando para Internet » Javascript »

Conocer índice de elemento con padre variable

Estas en el tema de Conocer índice de elemento con padre variable en el foro de Javascript en Foros del Web. Muy buenas, es mi primera consulta y la verdad es que me estoy volviendo loco; he encontrado soluciones aproximadas a lo que necesito pero no ...
  #1 (permalink)  
Antiguo 03/11/2011, 06:14
 
Fecha de Ingreso: noviembre-2011
Mensajes: 4
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Conocer índice de elemento con padre variable

Muy buenas, es mi primera consulta y la verdad es que me estoy volviendo loco; he encontrado soluciones aproximadas a lo que necesito pero no acabo de dar con la tecla.

Lo que quiero averiguar es el índice del enlace sobre el que se hace click; consigo hacerlo si referencio a la clase o la id del div padre, pero este div puede variar y no soy capaz de acceder al padre con una variable:

el menú sería el siguiente:


Código HTML:
Ver original
  1. <div id="menu" class= "menuprincipal">
  2.     <ul">
  3.       <li><a href="#">Uno</a></li>
  4.       <li><a href="#>Dos</a></li>
  5.       <li><a href="#">Tres</a></li>
  6.       <li><a href="#">Cuatro</a></li>
  7.     </ul>
  8. </div>


y el selector que me funciona lo tengo así


Código Javascript:
Ver original
  1. $('.menuprincipal a').click(function(){
  2.     var EnlacePinchado=$('#menu a').index(this);
  3. });


bien, el caso es que tengo otros menus de la misma clase, por lo que necesito acceder al padre de "this" que será distinto dependiendo del menú elegido, es decir, no me vale $('.menuprincipal a').index(this) porque lo que quiero saber es el indice del enlace pinchado dentro de cada menú.

He utilizado todas las combinaciones de parent() y children() que se me han ocurrido pero no tengo huevos de conseguir algo así como

Código Javascript:
Ver original
  1. var EnlacePinchado=$('MENU_PADRE_DEL_ENLACE_PINCHADO a').index(this)


que es lo que me haría el apaño.

¿Alguna idea?
  #2 (permalink)  
Antiguo 03/11/2011, 09:51
Avatar de Franz1628  
Fecha de Ingreso: marzo-2007
Ubicación: Lima - Perú
Mensajes: 145
Antigüedad: 17 años, 1 mes
Puntos: 26
Respuesta: Conocer índice de elemento con padre variable

si utilizas http://api.jquery.com/parent/
__________________
En mi Blog puedes ver articulos javascript y más...
@Franz1628
  #3 (permalink)  
Antiguo 03/11/2011, 10:03
 
Fecha de Ingreso: noviembre-2011
Mensajes: 4
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Conocer índice de elemento con padre variable

Si bueno, ya te comento que es por ahí por donde estoy investigando, pero no soy capaz de capturar una referencia a un objeto con parent, es decir

Código Javascript:
Ver original
  1. var menu = $(this).parent().parent().parent() // accedo al "div" pasando por "li" y "ul"
  2. alert(menu.id);
no me devuelve la id del menu, con lo que asumo que no puedo meter en una variable una referencia a un elemento al que he llegado con parent(). Aparte de que tengo que ser capaz de hacer una colección de enlaces (a) después de llegar al padre y pillarlos con un selector.

Lo máximo que he conseguido desde esta mañana es lo siguiente (agárrate):

Código Javascript:
Ver original
  1. $('.menuprincipal a').click(function(){
  2.     var id_div=$(this).parent("li").parent("ul").parent("div").attr("id");
  3.     var menudemarras="#"+ id_div +" a"; //chúpate esa
  4.     var indice=$(menudemarras).index(this);
  5.     alert(indice);
  6. });

que, contra todo pronóstico, funciona y hace lo que quiero.

Pero no deja de ser una cosa horrenda y horrible, ¿no hay ninguna manera elegante de conseguir usar parent() e index()?
  #4 (permalink)  
Antiguo 03/11/2011, 10:26
Avatar de Franz1628  
Fecha de Ingreso: marzo-2007
Ubicación: Lima - Perú
Mensajes: 145
Antigüedad: 17 años, 1 mes
Puntos: 26
Respuesta: Conocer índice de elemento con padre variable

utiliza entonces parents http://api.jquery.com/parents/


Código Javascript:
Ver original
  1. var id_div=$(this).parents("div").attr("id")

un Ejemplo

Código HTML:
Ver original
  1. <script type="text/javascript" src="jquery.js" ></script>
  2. $(document).ready(function(){
  3.     $('#a').click(function(){
  4.         $(this).parents('div').css('display','none');
  5.     })
  6. })
  7.  
  8. <div id="hola">
  9.     <a id="a" href="#">enlace</a>
  10.     <input id="b" type="button" value="ff">
  11. </span>
  12. </div>
__________________
En mi Blog puedes ver articulos javascript y más...
@Franz1628
  #5 (permalink)  
Antiguo 03/11/2011, 11:05
 
Fecha de Ingreso: noviembre-2011
Mensajes: 4
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Conocer índice de elemento con padre variable

Gracias por tu sugerencia, así me ahorro un par de parents; pero no puedo usar index igual que tú usas css en tu ejemplo.

Creo que mi pregunta no tiene respuesta porque no sé si hay alguna manera de pasarle al selector jQuery una referencia al elemento "div" y además a la colección de enlaces que tiene debajo para que index funcione (que es en realidad lo que me interesa) y me diga qué anchor es el que pinché.

Mi pregunta debió ser más amplia: ¿hay alguna manera de pasar una variable a un selector? Es decir, yo sé seleccionar $("div ul li a"), pero cómo hago para seleccionar un enlace fulanito de una lista tal de un div cual $("div_variable ul li a_variable")

Aunque mi ejemplo sea chapucero, quizá la única manera sea escribirlo en plan

Código Javascript:
Ver original
  1. var selector_jquery = "#" + div_id + " ul li " + "# " + a_id ;
  2. $(selector_jquery).hazalgo

con lo que a fin de cuentas la cosa funciona aunque me haga daño a la vista.

Un saludo y gracias.

Última edición por Froscas; 03/11/2011 a las 11:11
  #6 (permalink)  
Antiguo 03/11/2011, 12:04
 
Fecha de Ingreso: noviembre-2011
Mensajes: 4
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Conocer índice de elemento con padre variable

Bueno, he encontrado otro método (lo llamaremos "ascensor") que me parece más elegante; seguro que hay otra manera pero

Código Javascript:
Ver original
  1. $('.menuprincipal a').click(function(){
  2. var indice=$(this).parents('.menuprincipal').children().children().children().index(this);
  3. });

funciona perfectamente. No he dado antes con esto porque parece ser que "children" no trabaja igual que "parents", sino que sólo busca el nivel justo por debajo, con lo que hay que saber cuantos elementos tenemos entre el enlace y el menu (en este caso 3); ¡pero ya sólo ocupo una línea! con lo cual me quedo satisfecho.

Gracias de nuevo!

Etiquetas: jquery
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:40.