我对jquery很新,并且没有太多时间去探索更多,并且想知道是否有人可以帮助我。以下是我从不同地方提取的代码:
$("a").filter(function() {
return this.hostname && this.hostname !== location.hostname;
})
.attr({
target: "_blank"
});
$('a[rel*="external"]').live('click',function(){ this.target='_blank'; });
我所做的就是每当有一个带有href =“http://”的A标签时,它就会向它添加target =“_ blank”。如果href =“http://”跟随您所在的网站URL,那么它将不会添加target =“_ blank”。最重要的是,如果我想在新窗口中打开内部页面,那么我会将rel =“external”添加到A标签,然后在实际站点上将其转换为target =“_ blank”。
我怎样才能做到这一点,如果我有一个子域,它也不会作为外部页面打开。假设我的网址是example.com,子网域是test.example.com。因此,如果我从example.com链接到test.example.com,那么我不希望它在新窗口中打开。同样从test.example.com到example.com我也不希望它在新窗口中打开。
这也是一个好方法吗?我在xhtml 1.1中编写我的网站,并尝试保持页面有效。这将通过验证,但它仍然会将target =“_ blank”添加到结束结果中。这是不好的做法还是可以接受的?
感谢您的任何建议。
答案 0 :(得分:0)
您可以检查this.hostname
是否以location.hostname
结尾,而不是检查主机名是否相等。遗憾的是,JavaScript没有endsWith函数,但您可以轻松编写一个:
String.prototype.endsWith = function(that) {
return this.lastIndexOf(that) == this.length - that.length;
};
然后,在您的filter
方法中:
return this.hostname && this.hostname.endsWith(location.hostname);
subdomain.example.com
的链接以example.com
结尾,因此将设置其目标。