我正在创建一个脚本,自动将广告定位=“_ 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)"
});
});
有人知道如何解决这个问题吗?
非常感谢任何帮助。
答案 0 :(得分: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)"
});
});
答案 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.org
与fairfood.org
不是同一主机。 不要将WWW和非WWW主机视为一个。而是选择是否使用www
;然后在整个网站上坚持使用。
(这有助于避免潜在的duplicate content penalties。)