2011-05-04 108 views
2

我正在制作一个脚本,它自动将target =“_ blank”广告给所有外部链接。 问题是,该脚本还会使内部绝对链接在新选项卡中打开。 您可以在此测试链接检查问题: http://www.fairfood.org/testtest/jQuery将_blank添加到外部链接

$("a").filter(function() { 
    return this.hostname && this.hostname !== location.hostname; 
}).each(function() { 
    $(this).attr({ 
     target: "_blank", 
     title: "Visit " + this.href + " (click to open in a new window)" 
    }); 
}); 

是否有人知道如何解决这一问题?

任何帮助,非常感谢。

+0

该页面确实存在一些JS错误,如'TWTR未定义'和'FB未定义'。可能想先解决这些问题。 – pixelbobby 2011-05-04 15:02:01

+0

'www.fairfood.org'!= = fairfood.org' – jensgram 2011-05-04 15:03:35

+0

我不相信你需要在这里检查'hostname'。另外,我相信这个对象在其他浏览器中的处理方式是不同的,所以只需使用带有域名的'not'选择器即可。 – pixelbobby 2011-05-04 15:07:02

回答

10

www.yourhost.com是不一样的yourhost.com,所以当你的链接不匹配,这是行不通的。

如果您知道这将始终导致有效的URI,那么您可以取出www.

(另外,你的.each用途是几乎多余的,因为jQuery是已经博学约元素集;但是,你需要它this.href只是要注意的。)

$("a").filter(function() { 
    return this.hostname && 
      this.hostname.replace(/^www\./, '') !== 
       location.hostname.replace(/^www\./, ''); 
}).each(function() { 
    $(this).attr({ 
     target: "_blank", 
     title: "Visit " + this.href + " (click to open in a new window)" 
    }); 
}); 

Live example.

+0

+1很好的解决方案。 @Zoltan不要忘了标记它作为答案,如果它的作品。是的,我同意,不是说每个都是不必要的循环吗? – pixelbobby 2011-05-04 15:32:12

+0

@pixelbobby:查看我的较小文本。你需要'this.href'。 – 2011-05-04 16:29:31

+0

非常感谢你Tomalak,它的作品就像一个魅力! – Zoltan 2011-05-09 11:27:53

1

您可以使用一个jQuery选择这样做:

$('a').not('a[href*="fairfood.org/"]').each(function(){ 
    $(this).attr({target: "_blank", title: "Visit " + 
      $(this).href + " (click to open in a new window)"}); 
}); 
+2

'Go here!!!1' – 2011-05-04 15:07:27

+0

thx。添加.org。并为你的评论+1,因为我在阅读时笑了起来。 – pixelbobby 2011-05-04 15:08:08

+1

'Go here!!!1':) – jensgram 2011-05-04 15:09:15

0

fairfood.org和www.fairfood.org在技术上是不同的主机名。在测试之前摆脱www,如果你想要在你的脚本中工作。

0

如上所述,www.fairfood.orgfairfood.org的主机不一样。 不要将WWW和非WWW主机视为一个主机。而是选择是否使用www;然后坚持在整个网站

(这是避免潜在duplicate content penalties额外的好处。)

+0

'Go here!!!1' – 2011-05-04 15:09:57

+0

@Tomalak Geret'kal我站在纠正和删除不妥协的解决方案:) – jensgram 2011-05-04 15:11:26

+0

据我所知,网站在你给的链接解释说,在这种情况下重复的内容处罚将不适用。 – 2011-05-04 15:15:20