jQuery将_blank添加到外部链接

时间:2011-05-04 14:58:24

标签: jquery

我正在创建一个脚本,自动将广告定位=“_ blank”到所有外部链接。 问题是,该脚本还会在新选项卡中打开内部绝对链接。 您可以在此测试链接上检查问题: http://www.fairfood.org/testtest/

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

有人知道如何解决这个问题吗?

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:10)

www.yourhost.comyourhost.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.

答案 1 :(得分: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 :(得分:0)

fairfood.org和www.fairfood.org在技术上是不同的主机名。在测试之前删除www是否要在脚本中使用它们。

答案 3 :(得分:0)

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

(这有助于避免潜在的duplicate content penalties。)