Jquery外部链接帮助

Jquery外部链接帮助,jquery,subdomain,external,hyperlink,target,Jquery,Subdomain,External,Hyperlink,Target,我对jquery还比较陌生,没有太多时间来探索更多内容,我想知道是否有人可以帮助我。以下是我从不同地方提取的代码: $("a").filter(function() { return this.hostname && this.hostname !== location.hostname; }) .attr({

我对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=“\u blank”。如果href=“http://”跟随您所在的网站URL,则不会添加target=“\u blank”。此外,如果我希望在新窗口中打开一个内部页面,那么我会将rel=“external”添加到a标记中,然后在live站点上将其转换为target=“\u blank”

我如何使它,如果我有一个子域名,它将不会作为一个外部页面打开。假设我的url是example.com,子域是test.example.com。因此,如果我从example.com链接到test.example.com,那么我不希望它在新窗口中打开。从test.example.com到example.com,我也不希望它在新窗口中打开

这也是一个好方法吗?我用XHTML1.1编写我的站点,并试图保持页面的有效性。这将通过验证,但仍会在最终结果中添加target=“\u blank”。这是坏习惯还是可以接受的


谢谢您的建议。

您可以检查此.hostname是否以
location.hostname
结尾,而不是检查主机名是否相等。不幸的是,JavaScript没有endsWith函数,但您可以轻松编写一个:

String.prototype.endsWith = function(that) {
    return this.lastIndexOf(that) == this.length - that.length;
};
然后,在您的
过滤器
方法中:

return this.hostname && this.hostname.endsWith(location.hostname);

指向subdomain.example.com
的链接以
example.com
结尾,因此可以设置它们的目标。

是的,这很好。页面应该在JavaScript运行之前通过验证,而不是在JavaScript运行之后。我认为在JavaScript运行之后对页面进行验证仍然是一种很好的做法。您可以在此处使用运行
窗口的
单击()
。打开($(this.attr('href'),'u blank')
。它仍然使用
\u blank
名称,但不会将属性添加到HTML中。