2011-05-04 110 views
2

我正在製作一個腳本,它自動將target =「_ blank」廣告給所有外部鏈接。 問題是,該腳本還會使內部絕對鏈接在新選項卡中打開。 您可以在此測試鏈接檢查問題: http://www.fairfood.org/testtest/jQuery將_blank添加到外部鏈接

$("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

該頁面確實存在一些JS錯誤,如'TWTR未定義'和'FB未定義'。可能想先解決這些問題。 – pixelbobby 2011-05-04 15:02:01

+0

'www.fairfood.org'!= = fairfood.org' – jensgram 2011-05-04 15:03:35

+0

我不相信你需要在這裏檢查'hostname'。另外,我相信這個對象在其他瀏覽器中的處理方式是不同的,所以只需使用帶有域名的'not'選擇器即可。 – pixelbobby 2011-05-04 15:07:02

回答

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

Live example.

+0

+1很好的解決方案。 @Zoltan不要忘了標記它作爲答案,如果它的作品。是的,我同意,不是說每個都是不必要的循環嗎? – pixelbobby 2011-05-04 15:32:12

+0

@pixelbobby:查看我的較小文本。你需要'this.href'。 – 2011-05-04 16:29:31

+0

非常感謝你Tomalak,它的作品就像一個魅力! – Zoltan 2011-05-09 11:27:53

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

'Go here!!!1' – 2011-05-04 15:07:27

+0

thx。添加.org。併爲你的評論+1,因爲我在閱讀時笑了起來。 – pixelbobby 2011-05-04 15:08:08

+1

'Go here!!!1':) – jensgram 2011-05-04 15:09:15

0

fairfood.org和www.fairfood.org在技術上是不同的主機名。在測試之前擺脫www,如果你想要在你的腳本中工作。

0

如上所述,www.fairfood.orgfairfood.org的主機不一樣。 不要將WWW和非WWW主機視爲一個主機。而是選擇是否使用www;然後堅持在整個網站

(這是避免潛在duplicate content penalties額外的好處。)

+0

'Go here!!!1' – 2011-05-04 15:09:57

+0

@Tomalak Geret'kal我站在糾正和刪除不妥協的解決方案:) – jensgram 2011-05-04 15:11:26

+0

據我所知,網站在你給的鏈接解釋說,在這種情況下重複的內容處罰將不適用。 – 2011-05-04 15:15:20