我不确定我要把什么放在'???'检查网站是否是我的地址。这也适用于谷歌的AdSense广告(只是想知道,但不重要)?
我在考虑使用像'not'这样的逻辑运算符。所以它会检查我的网站是否不是?那么???会是我的网站吗?
$j(!a[href=???]).click(function(){
window.open(this.href, "target=_blank");
return false;
});
答案 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' );
}
});
答案 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/之类的网址,但这是一个边缘情况。