2010-03-04 26 views
1

我對jquery相當陌生,並沒有太多時間去探索更多,並想知道是否有人可以幫助我。下面是代碼我有我從不同的地方拉:Jquery External Link幫助

$("a").filter(function() { 
         return this.hostname && this.hostname !== location.hostname; 
         }) 
         .attr({ 
           target: "_blank" 
           }); 
         $('a[rel*="external"]').live('click',function(){ this.target='_blank'; }); 

我有這樣做的是,每當有與HREF =的一個標記的「http://」,然後將其添加目標=「_空白」來它。如果href =「http://」後跟您所在的網站網址,則不會添加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

是的,這很好。預計頁面將在JavaScript運行之前通過驗證*,而不是在*之後。 – 2010-03-05 01:25:03

+0

我認爲在JavaScript運行之後,頁面驗證仍然是很好的做法。你可以在這裏使用'click()'運行'window.open($(this).attr('href'),'_blank')'。它仍然使用'_blank'名稱,但它不會將該屬性添加到HTML中。 – alex 2010-03-05 01:31:37

回答

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,因此他們的目標將是組。