jQuery为传出链接添加target ="_ blank"

Gus*_*ooL 31 javascript jquery

我需要一些帮助才能创建jquery脚本:)
我的HTML上有一些这样的链接.

<a href="http://google.com">Google</a>
<a href="/">Home</a>
<a href="http://www.gusdecool.com/">Home</a>
<a href="contactus.html">Contact Us</a>
Run Code Online (Sandbox Code Playgroud)

现在我希望jQuery检查我页面上的所有链接.如果该链接在我的服务器之外(我的服务器是gusdecool.com).然后添加target="_blank".结果将是这样的

<a href="http://google.com" target="_blank">Google</a>
<a href="/">Home</a>
<a href="http://www.gusdecool.com/">Home</a>
<a href="contactus.html">Contact Us</a>
Run Code Online (Sandbox Code Playgroud)

Moi*_*man 50

假设所有外部链接都以http://开头,你可以这样做:

$('a[href^="http://"]').not('a[href*=gusdecool]').attr('target','_blank');

  • 我在搜索外部链接的快速解决方案之后遇到了这个帖子,我认为选择器应该是`$('a [href ^ ="http://"],[href ^ ="https://"] ').`以匹配https链接. (12认同)

Rya*_*oom 16

$('a').each(function() {
   var a = new RegExp('/' + window.location.host + '/');
   if (!a.test(this.href)) {
      $(this).attr("target","_blank");
   }
});
Run Code Online (Sandbox Code Playgroud)

这是来自css-tricks.com,似乎工作得很好.

  • 我有两个问题:1)这与"<a href="/">主页</a>"等相关链接有关吗?2)为什么不把`var a = new RegExp('/'+ window.location.host +'/');`befor the loop? (3认同)

gio*_*_13 14

$('a[href^=http]:not([href^=http://www.gusdecool.com/])').attr('target','_blank');
Run Code Online (Sandbox Code Playgroud)

当然,只有当所有外部链接都以http协议开头时,这才有效.您应该调整此代码以满足您的需求(例如没有协议或不同协议的链接).

更新:

$('a[href^=http]:not([href^=http://www.gusdecool.com],[href^=http://gusdecool.com])')
    .add('a[href^=www]:not([href^=www.gusdecool.com])')
        .attr('target','_blank');
Run Code Online (Sandbox Code Playgroud)

它选择所有具有以网页地址开头ahref属性(有或没有协议)的元素,并且不指向您网站的地址并将其target属性更改为_blank.


小智 8

如果你有一个子域,这个函数似乎更容易:

$('a').attr('target', function() {
  if(this.host == location.host) return '_self'
  else return '_blank'
});
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这一个. (2认同)