2010-10-07 26 views
12

esto debería ser bastante simple, pero por alguna razón, no funciona.Obtenga el atributo "alt" de una imagen que reside dentro de una etiqueta <a>

Quiero obtener el atributo "alt" de una imagen que se encuentra dentro de una etiqueta

<div id="album-artwork"> 
<ul> 
    <li><a href="link to large image"><img src="thumbnail" alt="description of the image" /></a></li> 
    ... 
</ul> 
</div> 



$("#album-artwork a").click(function(e) { 
e.preventDefault(); 

var src = $(this).attr("href"); 
var alt = $(this).next("img").attr("alt"); 


alert(src); // ok! 
alert(alt); //output: undefined 

}); 

cualquier idea qué lado() no funciona? ¿Hay una mejor solución por ahí?

Gracias de antemano Marco

+0

revise mi @ user2727841 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡probado y funciona !!! – user2727841

+0

Marco revise mi @ user2727841 respuesta ... – user2727841

Respuesta

19

Es porque la etiqueta de imagen está dentro de la etiqueta ul. El próximo solo busca etiquetas en el mismo nivel. Vas a tener que utilizar

var alt = $(this).children("img").attr("alt"); 

EDIT: incluido el adicional "que faltaba

+0

acabo de responder mi propia pregunta ... se olvidó de hermanos y niños ... su respuesta ayuda a confirmar mi respuesta. ¡Gracias! – Marco

3

Trate $(this).find('img') en lugar de seleccionar algún elemento dentro de el enlace

1

Will not .Next recoger. el siguiente elemento que es el siguiente Li y no el IMG?

2

No importa. Acabo de entenderlo ... Me he dado cuenta de que el img no es un hermano de <a> sino un niño de <a>

Ésta es la sintaxis correcta

var alt = $(this).children("img").attr("alt"); 
3

o

$('img', this).attr('alt'); 

prueba: http://jsbin.com/amado4

+0

jQuery reescribe '$ (child, parent)' internamente a '$ (parent) .find (child)'. – Alec

6
$(this).find('img').attr('alt'); 
1

try probado esto y su trabajo !!!

<div id="album-artwork"> 
<ul> 
    <li><a href="javascript:void(0);"><img src="images/ajax-loader.gif" alt="ajax-loader" /></a></li> 
    <li><a href="javascript:void(0);"><img src="images/close.png" alt="close" /></a></li> 
    <li><a href="javascript:void(0);"><img src="images/copy.png" alt="copy" /></a></li> 
</ul> 
</div> 

y el código de jQuery es

$(document).ready(function() { 
     $("#album-artwork a").click(function(e) { 
      e.preventDefault(); 

      var src = $(this).attr("href"); 
      //var alt = $(this).next("img").attr("alt"); 
      var alt = $(this).children().attr("alt"); 
      //find function also do the same thing if you want to use. 
      /*var alt = $(this).find("img").attr("alt");*/ 

      alert(src); // ok! 
      console.log(src); // ok! 
      alert(alt); //output: not undefined now its ok! 
      console.log(alt); //output: not undefined now its ok! 
     }); 
    }); 

la función children() encontró ninguna niños, pero si usted quiere encontrar cualquier niño específicas definen a los niños nombrar como esto children("img")Ochildren("button").

Cuestiones relacionadas