2009-12-19 4 views
19

J'ai essayé de nombreuses variantes pour mettre target="_blank" dans des liens avec jQuery, mais je n'arrive pas à le faire fonctionner.Comment mettre target = "_ blank" dans jQuery?

Voici mon code:

var thumbfile = "<?php echo $smit_iturl_v; ?>"; 
jQuery(document).ready(function() { 
    var actualHost = jQuery.trim(jQuery.url.attr("host")); 
    jQuery("a img").each(function (i) { 

     if (jQuery.trim(jQuery.url.setUrl(jQuery(this).attr("src")).attr("host")) == actualHost &&  
      (jQuery.url.setUrl(jQuery(this).attr("src")).attr("path")).indexOf("wp-content") != -1 && 

      isImage(jQuery.url.setUrl(jQuery(this).attr("src")).attr("file"))) { 

      var parentTag = jQuery(this).parent().get(0).tagName; 
      parentTag = parentTag.toLowerCase(); 

      if (parentTag == "a" && 
      jQuery.url.setUrl(jQuery(this).parent().attr("href")).attr("host") == actualHost && 
      jQuery.url.setUrl(jQuery(this).parent().attr("href")).attr("path").indexOf("wp-content") != -1 && 
      isImage(jQuery(this).parent().attr("href"))) { 

       var description = (jQuery(this).attr("alt") == "") ? jQuery(this).attr("title") : jQuery(this).attr("alt"); 
       jQuery(this).parent().attr("href", thumbfile + 
         "?title=" + jQuery(this).attr("title") + 
         "&description=" + description + 
         "&url=" + stripDomain(jQuery(this).parent().attr("href")) 

       ); 
      } 
     } 
    }); 

Comment puis-je faire?

Répondre

16

Puisque vous itérez les éléments d'image qui sont Childs d'une ancre, au début de la boucle, vous pouvez le régler:

//... 
jQuery("a img").each(function (i) { 
    // 'this' is the img element, you should get the parent anchor 
    jQuery(this).parent().attr('target', '_blank'); 
    //... 
}); 
72

Trop d'informations! Cela devrait fonctionner correctement:

$("a").attr("target","_blank"); 

Voir l'exemple ici http://jsbin.com/evexi/edit. Cela fonctionne parfaitement.

+9

Si vous souhaitez uniquement ouvrir des liens externes dans une nouvelle fenêtre, cette expression régulière peut être utile. '$ (" a [href^= 'http'] "). attr ('target', '_ blank');' –

+0

merci mon pote, m'a aidé aussi – DextrousDave

+0

Fou utile, merci! –

10

Pour ajouter à la simplicité impressionnante de cette réponse, ce qui était très serviable en passant, vous pouvez cibler plusieurs types de liens par exemple:

$("#whatever_id a, #another_id, #yet_another, #etc").attr("target","_blank"); 

Il suffit de garder séparés par des virgules de l'autre id.

7

Vous pourriez donner à tous les liens que vous souhaitez ouvrir dans une nouvelle fenêtre une classe, par exemple 'target-blank';

<a href='#' class='any existing classes target-blank'>Opens in a new window</a> 

puis ajoutez une goutte de jQuery

$("a.target-blank").attr('target','_blank'); 

xhtml valide et un DOM qui comprend target = '_ blank'!

Questions connexes