Utilisation de ‘each’ pour obtenir un lien à insérer dans une info-bulle jQuery

J’utilise cette info-bulle de jquerytools:

$("li img").tooltip({ position: "bottom right"}); 

et souhaitez y insérer un lien à partir d’un lien “Plus d’infos” existant dans le même lien:

 var morelink; morelink = $(this).find("li a").attr("href"); $(".tooltip").append('More Info'); 

le voici dans un violon raté:

http://jsfiddle.net/nathanbweb/tEVnt/

Comment enchaîner les deux, ou utiliser .each, pour obtenir le bon lien dans l’info-bulle?

Ce n’est pas particulièrement facile en raison de la façon dont les info-bulles sont ajoutées et il ne semble pas y avoir de lien direct entre l’object et l’info-bulle qui soit facile à comprendre.

Ce qui est légèrement plus facile à faire est quelque chose comme ceci, ajoutez le lien au titre, avant qu’il ne devienne une info-bulle:

 // add tooltip from jquerytools $("li img").each(function(){ var obj = $(this); var link = obj.next('a').attr('href'); if (link !== undefined) { var title = obj.attr('title'); title = title+' More Info'; obj.attr('title', title); } obj.tooltip({ position: "bottom right",}); }); 
  • Passer par chaque li qui a un img
  • Obtenez le prochain object qui dans votre cas est une ancre
  • Obtenez le lien de l’ancre
  • Vérifiez que le lien est en fait un lien (il y en a sans lien)
  • S’il y avait un lien, ajoutez-le au titre (qui deviendra l’info-bulle)
  • Enfin append l’info-bulle

Voyez-le travailler ici

Votre meilleur choix serait probablement de créer votre propre info-bulle pour chaque image.

  
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse tincidunt rhoncus risus sed rhoncus.
More Info

Construisez l’info-bulle comme:

 $(".tooltip").each(function(){ var obj = $(this); obj.append(obj.prev().attr("title"), obj.next().clone()); }); 

Selon la documentation de jQuery-tools, l’ajout d’un conteneur .tooltip juste après l’élément envoyé au plug-in devrait suffire.

Mettez ce code:

 $.fn.outerHtml = function() { if (this.length) { var div = $('
'); var clone = $(this[0].cloneNode(false)).html(this.html()).appendTo(div); var outer = div.html(); div.remove(); return outer; } else return null; }; $('li').each(function(){ $(this).children("img").attr("title", $(this).children("img").attr("title") + $(this).children("a").outerHtml()); });

Juste avant

 $("li img").tooltip({ position: "bottom right"}); 

Cela crée une extension .outerHtml à jquery qui vous permet d’obtenir le code HTML complet d’un élément. Ensuite, nous l’ajoutons au titre AVANT qu’il soit transformé en info-bulle.

Je viens de l’essayer sur votre clavier et cela fonctionne bien.