javascript - Open all links not part of my website in new window with jquery - Stack Overflow

Im not sure what i have to put in the '???' to make it check if the website is my address or

Im not sure what i have to put in the '???' to make it check if the website is my address or not. Will this also work for google adsense ads(just wondering, but not important)?

I was thinking of using a logicial operator like 'not'. So it will check if NOT my website? So then the ??? would be my website?

$j(!a[href=???]).click(function(){
                window.open(this.href, "target=_blank");
                return false;
            });

Im not sure what i have to put in the '???' to make it check if the website is my address or not. Will this also work for google adsense ads(just wondering, but not important)?

I was thinking of using a logicial operator like 'not'. So it will check if NOT my website? So then the ??? would be my website?

$j(!a[href=???]).click(function(){
                window.open(this.href, "target=_blank");
                return false;
            });
Share Improve this question edited May 27, 2012 at 23:53 Joel Coehoorn 417k114 gold badges578 silver badges815 bronze badges asked Dec 8, 2011 at 23:22 chasethesunnnchasethesunnn 2,2645 gold badges28 silver badges43 bronze badges 3
  • 1 You realize that this way, you break all your links if a popup blocker is enabled? It's much, much better to do this directly in the HTML source, where a target="_blank" will work without triggering popup blockers. – Pekka Commented Dec 8, 2011 at 23:27
  • @Pekka so i see using the .click() with window.open would break the links, but the method below that uses the .attr() and adds that html code in that you mentioned should not break it, correct? – chasethesunnn Commented Dec 8, 2011 at 23:34
  • 1 the method below with adding target="_blank" shouldn't break it, you're right. – Pekka Commented Dec 8, 2011 at 23:34
Add a ment  | 

4 Answers 4

Reset to default 5

Try this:

$j('a')
    .not('[name^="http://your.domain./"]')
    .attr('target', '_blank');

Update

My previous fix only works if all URLs are absolute, which was a bad assumption. Try this instead:

$j('a[name^="http:"], a[name^="https:"]')
    .not('[name^="http://your.domain./"]')
    .attr('target', '_blank');

This new version skips all relative URLs. If all of your in-site URLs are relative (i.e. don't start with https?:), you can skip the call to .not.

Running anything like $( 'a' ) is going to loop through EVERY A element - you can only worry about it on the actual click. Also, you can just run with relative urls being your site, and absolute url's being someone else's.

$( document ).on( 'click', 'a', function( event ){
  var $a = $( this );
  // test for anything like `http://` or '//whatever' or 'ftp://'
  if ( /^\w+?\:?\/\//.test( $a.attr( 'href' ) ) ){
    // since this runs before the event is propagated,
    // adding it now will still work
    $a.prop( 'target', '_blank' );
  }
});

Demo: http://jsfiddle/danheberden/3bnk9/

Or you can use window.open:

$( document ).on( 'click', 'a', function( event ){
  var href = $( this ).attr( 'href' );
  // test for anything like `http://` or '//whatever' or 'ftp://'
  if ( /^\w+?\:?\/\//.test( href ) ){
    // dont follow the link here
    event.preventDefault();

    //  open the page
    window.open( href, '_blank' );
  }
});

Demo: http://jsfiddle/danheberden/NcKdh/

You can set up a class to do it:

// Outbound Links
var outLinks = function() { $('a[@class*=out]').click( function(){ this.target = '_blank'; } ); }
$(document).ready(outLinks);

Then all you need do is add the "out" class to any link and it will open a new window.

Or for any link which starts with http://

$('a[href^="http://"]').prop("target", "_blank");

How about:

$j('a').live('click', function(){
  if(this.href.indexOf('yourwebsite.') == -1) {
    window.open(this.href, "target=_blank");
    return false;
  }
});

This could also be improved with a regex so that it doesn't catch URLs like http://someothersite./yourwebsite./, but it's an edge case.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745397115a4625930.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信