Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Saber el indice de un enlace en un div

Estas en el tema de Saber el indice de un enlace en un div en el foro de Javascript en Foros del Web. Hola, tengo varios enlaces dentro de un div y necesito que al pinchar sobre cualquiera de estos me salga un mensaje indicándome la posición, o ...
  #1 (permalink)  
Antiguo 28/05/2015, 03:34
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 11 meses
Puntos: 2
Saber el indice de un enlace en un div

Hola, tengo varios enlaces dentro de un div y necesito que al pinchar sobre cualquiera de estos me salga un mensaje indicándome la posición, o sea, el índice que ocupa dicho enlace dentro del div y no quiero utilizar un id para cada enlace, porque son bastante enlaces

Y con esta función me muestra la posición de cada uno de los enlaces, pero no del enlace sobre el que he pinchado sólo, que es lo que me interesa
Código Javascript:
Ver original
  1. function posicionEnlace() {
  2.     var contenedor = document.getElementById("galeria");
  3.     var lista = contenedor.getElementsByTagName("a");
  4. for(var i=0; i<lista.length; i++) {
  5.     alert(" Posicion: " + [i] + "" );
  6. }  
  7. }
Código HTML:
Ver original
  1. <div id="galeria">
  2. <ul id="imgLista">
  3. <li><a id="uno" onClick="posicionEnlace(this)" href="images\1_castillo.jpg" title="Esta es la primera imagen">1</a></li>
  4. <li><a onClick="posicionEnlace(this)" href="images\2_castillo.JPG" title="Esta es la segunda imagen">2</a></li>
  5. </ul>
  6. </div>
  #2 (permalink)  
Antiguo 28/05/2015, 05:27
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 6 meses
Puntos: 1012
Respuesta: Saber el indice de un enlace en un div

siguiendo con la lógica de código que muestras
Cita:
function posicionEnlace(este) {
var contenedor = document.getElementById("galeria");
var lista = contenedor.getElementsByTagName("a");
for(var i=0; i<lista.length; i++) {
if (este === lista[i]) alert(" Posicion: " + [++i] + "" );
}
}
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 28/05/2015, 06:35
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: Saber el indice de un enlace en un div

Funciona perfectamente, pero ahora no se como utilizarlo para lo que yo quiero.
Tengo una galeria de imagenes, entonces cuando pincho en un enlace me selecciona la imagen correspondiente y con focus y css, me deja remarcado ese enlace, pero al pinchar en cualquier lugar de la pantalla, actúa el evento onblur y me elimina la selección, entonces lo que yo necesito es que al pinchar en cualquier sitio el evento onBlur me mantenga el foco sobre el enlace seleccionado, así que el código que te he pasado era para el evento onBlur y no para el onClick

Última edición por pedromir; 28/05/2015 a las 07:07
  #4 (permalink)  
Antiguo 28/05/2015, 15:29
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 18 años
Puntos: 56
Respuesta: Saber el indice de un enlace en un div

En ese caso para lo que estás haciendo se adapte a tus necesidades debes usar otro método ya que esos eventos de control mayormente se usan para otro propósito, lo puedes hacer, pero te recomiendo que por cada enlace que se seleccione le agregues una clase que identifique que elemento es el actual.
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #5 (permalink)  
Antiguo 28/05/2015, 16:31
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: Saber el indice de un enlace en un div

La forma más sencilla y quizás la más lógica, como tu comentas, es ponerle un id a cada enlace, pero como son bastantes y con el tiempo le voy a seguir añadiendo enlaces, o sea, fotos, he preferido intentarlo de esta otra manera, y ahorrarme todos los id, pero si no se puede tendré que recurrir a ellos
  #6 (permalink)  
Antiguo 28/05/2015, 17:03
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 18 años
Puntos: 56
Respuesta: Saber el indice de un enlace en un div

No es necesario editar tu HTML mi estimado, a lo que me refiero es que lo hagas en tu propio bucle, con el elemento padre "galeria" ya tienes el control de todos los elementos por debajo. Aquí te pongo un ejemplo: http://jsfiddle.net/wZVanG/j1b8htwy/. Como te mencioné, añades una clase llamada "active" al elemento, así identificas el foco del mismo.
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #7 (permalink)  
Antiguo 29/05/2015, 02:29
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: Saber el indice de un enlace en un div

Ya funciona perfectamente, me has resuelto un problema que llevaba tiempo detrás de él y no conseguía que funcionara bien del todo, así que muchas gracias, pero como suele ocurrir al solucionar un problema surge otro y es que al pinchar en un enlace no ejecuta la función que muestra la foto correspondiente.
He hecho distintas pruebas pero no me funciona.
Este es el código de los enlaces con la llamada a la función.

Código HTML:
Ver original
  1. <div id="galeria">
  2. <ul id="imgLista">
  3. <li><a onClick="return showPic(this)" href="images\1_castillo.jpg" title="Esta es la primera imagen">1</a></li>
  4. <li><a onClick="return showPic(this)" href="images\2_castillo.jpg" title="Esta es la segunda imagen">2</a></li>
  5. <li><a onClick="return showPic(this)" href="images\3_castillo.jpg" title="Esta es la tercera imagen">3</a></li>
  6. </ul>
  7. <img id="imgContenedor" src="images\1_castillo.jpg" width="729" height="525" /></div>

Última edición por pedromir; 29/05/2015 a las 11:54
  #8 (permalink)  
Antiguo 29/05/2015, 16:03
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 18 años
Puntos: 56
Respuesta: Saber el indice de un enlace en un div

El problema es que estás cambiando el código frecuentemente, y por eso resultan los conflictos, con el último código que pusiste ya no funcionaría lo que te pasé y se emplearía otra solución. Coloca el código final de tu HTML para que finalmente el link funcione bien y también verifique su posición actual.

EDIT:

Con el último ejemplo: http://jsfiddle.net/mvm92hzq/
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */

Última edición por America|UNK; 29/05/2015 a las 16:18
  #9 (permalink)  
Antiguo 30/05/2015, 02:12
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: Saber el indice de un enlace en un div

El código que te he pasado ahora es el original, lo que ocurre es que en mi primer correo como lo que estaba buscando era una solución para el problema del evento onBlur, y sólo buscaba lo del tema del índice no puse el código para el cambio de imagen, porque esto me funcionaba bien, pero como ahora la solución viene por otro lado y en este momento lo que no funciona es el cambio de foto, te he puesto el código que utilizo y por eso no te lo había puesto antes.
Código Javascript:
Ver original
  1. //Con esta línea tal como está, queda remarcada la opción, pero no hace nada
  2.             showPic.call(this, event, i);
  3.             //pero se cambio call por bind
  4.              showPic.bind(this, event, i);
  5.               //me abre la foto correspondiente, pero en otra página, así que No me hace el cambio de imagen
Te paso el código que utilizo para el cambio de imagen
Código Javascript:
Ver original
  1. function showPic(whichpic) {
  2.     if (document.getElementById) {
  3.         document.getElementById('imgContenedor').src = whichpic.href;
  4.     if (whichpic.title) {
  5.         document.getElementById('imgDescripcion').childNodes[0].nodeValue = whichpic.title;
  6.     } else {
  7.         document.getElementById('imgDescripcion').childNodes[0].nodeValue = whichpic.childNodes[0].nodeValue;      
  8.     }
  9.     return false;
  10.     } else {       
  11.         return true;       
  12.     }
  13. }
  #10 (permalink)  
Antiguo 30/05/2015, 13:51
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 18 años
Puntos: 56
Respuesta: Saber el indice de un enlace en un div

call es muy diferente que bind, es recomendable leas su función de cada una de ellas, puedes ver este artículo sobre los diferentes métodos para invocar funciones.

Ahora,

Código Javascript:
Ver original
  1. showPic.call(this, event, i);
  2. //this no cuenta como argumento
  3. //Primer argumento de la función: event

La función call está haciendo referencia al mismo elemento, es decir, cuando estés en la función showPic(event, i){ alert(this.href) }, puedes acceder al elemento con this, en este caso lo usé para acceder al atributo href.

A la llamada de la función le paso el argumento event, que servirá para prevenir el evento por defecto del enlace. Con event.preventDefault(), el link ya no se abriría en otra ventana, como normalmente lo hace.

Update: http://jsfiddle.net/wZVanG/mvm92hzq/1/
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #11 (permalink)  
Antiguo 31/05/2015, 12:15
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: Saber el indice de un enlace en un div

El código que muestra el texto con la descripción de la imagen "imgDescripcion" no es compatible con Firefox, que es el que utilizo yo normalmente, porque con este navegador no aparece texto ninguno, así que lo he probado con IE y con Chrome y con estos dos funciona perfectamente.
  #12 (permalink)  
Antiguo 02/06/2015, 07:25
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 6 meses
Puntos: 1012
Respuesta: Saber el indice de un enlace en un div

usa :target de css3
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #13 (permalink)  
Antiguo 03/06/2015, 03:01
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: Saber el indice de un enlace en un div

El problema viene porque Firefox no soporta la propiedad innerText, así que he cambiado esta propiedad por la propiedad textContent que si es soportada por Firefox y problema resuelto, además me he creado una función que comprueba si el navegador usado es compatible con esta última propiedad y si lo es pues la utiliza y si no lo es utiliza la otra, innerText, de esta manera me aseguro que funciona correctamente con todos los navegadores.
Así que esta consulta se puede dar por solucionada y cerrada, sólo me queda daros las gracias a tod@s por vuestra ayuda y muy, pero que muy especialmente a America|UNK por su interés, paciencia y por la clase magistral de programación que me ha dado.

Etiquetas: enlace, indice
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 04:16.