使用jquery在新窗口中打开不属于我网站的所有链接

时间:2011-12-08 23:22:45

标签: javascript jquery adsense logical-operators

我不确定我要把什么放在'???'检查网站是否是我的地址。这也适用于谷歌的AdSense广告(只是想知道,但不重要)?

我在考虑使用像'not'这样的逻辑运算符。所以它会检查我的网站是否不是?那么???会是我的网站吗?

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

4 个答案:

答案 0 :(得分:5)

试试这个:

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

<强>更新

如果所有网址都是绝对的,我之前的修补程序仅适用,这是一个不好的假设。试试这个:

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

此新版本会跳过所有相对网址。如果您的所有站点内网址都是相对的(即不以https?:开头),则可以跳过对.not的调用。

答案 1 :(得分:3)

运行$( 'a' )之类的任何内容将循环遍历每个A元素 - 您只能在实际点击时担心它。此外,你可以运行相对网址作为你的网站,绝对网址是别人的。

$( 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' );
  }
});

演示:http://jsfiddle.net/danheberden/3bnk9/

或者您可以使用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' );
  }
});

演示:http://jsfiddle.net/danheberden/NcKdh/

答案 2 :(得分:1)

您可以设置一个类来执行此操作:

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

然后您需要做的就是将“out”类添加到任何链接,它将打开一个新窗口。

或者以http://

开头的任何链接
$('a[href^="http://"]').prop("target", "_blank");

答案 3 :(得分:0)

怎么样:

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

这也可以通过正则表达式进行改进,以便它不会捕获http://someothersite.com/yourwebsite.com/之类的网址,但这是一个边缘情况。