2009-09-12 3 views
0

Modifiez tous les liens contenant une image en: javascript (alert (thehref));Modifiez tous les liens contenant une image en: javascript (alert (thehref));

par ex.

<a href="/galleries/anna-leah-111827/image01.html"><img src="/source_galleries/anna-leah-111827/tn/01.jpg"></a> 
<a href="/galleries/23435/image01.html">ssss</a> 

devient

<a href="/galleries/anna-leah-111827/image01.html" onclick="alert(this.href)"><img src="/source_galleries/anna-leah-111827/tn/01.jpg"></a> 
<a href="/galleries/23435/image01.html">ssss</a> 

Comment puis-je faire cela comme un bookmarklet qui utilise un fichier JavaScript externe.

J'ai essayé toute la journée en vain.

Répondre

4
for (var i= document.links.length; i-->0;) { 
    if (document.links[i].getElementsByTagName('img').length!=0) { 
     document.links[i].onclick= function() { 
      alert(this.href); 
     }; 
    } 
} 

encodée dans un bookmarklet:

javascript:for%28i%3Ddocument.links.length%3Bi--%3E0%3B%29if%28document.links%5Bi%5D.getElementsByTagName%28%27img%27%29.length%21%3D0%29document.links%5Bi%5D.onclick%3Dfunction%28%29%7Balert%28this.href%29%3B%7D%3Bvoid%280%29%3B 
+0

si vous ne voulez pas pour suivre le lien, ajoutez 'return false' au gestionnaire d'événements; vous pouvez également déplacer la fonction littérale hors de la boucle pour des raisons de performances (il n'est pas nécessaire de créer un nouvel objet fonction pour chaque lien: le gestionnaire d'événements peut facilement être partagé) – Christoph

1

J'inclurais jQuery dans le fichier externe, utilisez le mode noconflict, et faire quelque chose comme ceci:

$('a:has(img)').bind('click', function(event){ 
    event.preventDefault(); 
    alert($(this).children('img').get(0).attr('src')); 
} 
Questions connexes