Using JQuery To Open External Links In A New Window

Opening external links in a new window can be useful, but adding target="_blank" can be a real chore. Not only that, but if you are trying to validate the page to XHTML strict then the target attribute will cause errors to appear as it is not defined in XHTML.

An easy solution to this issue is to add the following JQuery to your site. It will look for any links that start with http and do not contain the current domain and add a new click event to them that causes a new window to be opened. This will exclude most links straight away as they will most likely be relative.

$("a[href^='http']:not([href*='example.com'])").click(function(){
 window.open(this.href);
 return false;
}).attr("title", "Opens in a new window");

This code will also add a new title to each link, replacing any that already exist, just remove the call to attr() at the end of the block to stop this. If you are using this on your site then make sure you put this into a dom ready block, and also that you change the example.com to be your own domain name.

Comments

Thank you for taking the time to provide such a great snippet! I was wondering what would need to be added to this code to set the height and width of this new pop up window? Much appreciated!!
Permalink

This is a pretty good resource:
Window open() Method

So, in adapting the above snippet you would get:

$("a[href^='http']:not([href*='example.com'])").click(function(){
 window.open(this.href,'','width=200,height=100');
 return false;
}).attr("title", "Opens in a new window");
Name
Philip Norton
Permalink

I like to use the following:

$("a[href*='http://']:not([href*='"+location.hostname.replace("www.","")+"'])").each(function() {
        //do some 'stuff' to the external link
    });

I also like to add an external class to the link for styling and also use:

$(this).click(function(event) {
        window.open(this.href, '_blank');
});

Full code and examples at:
jquery external links in new window

Permalink
$(function(){ $("a[href^='http']:not([href^='http://'+window.location.hostname.toLowerCase()])").attr({target: "_blank", title: $(this).attr('title')+" - this link will be open in a new window" }).append(' [^]'); });
Permalink

thank u very muchhhhhhhh

it's help me

Permalink
is this method still operational in 2017?
Permalink

Add new comment

The content of this field is kept private and will not be shown publicly.
CAPTCHA
4 + 3 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.