2009-05-06 79 views
3

我有一個從外部供應商獲取屏幕抓圖的模板,並且需要在導航中包含絕對路徑,以便外部託管的內容將正確鏈接回我們的網站。如何使用javascript將相對的href屬性轉換爲絕對路徑?

眼下頁/模板是由我們的後端開發人員編寫的全局菜單的應用程序...所以任何人誰更新我們的網站進去,並改變菜單和其路徑驅動...

權現在所有鏈接都鏈接到相對路徑回到根目錄。

例如

<a href="/">Home</a> 
<a href="/news/">News</a> 
<a href="/media/">Media</a> 
<a href="/other/">Other</a> 

我需要一種簡單的方式(優選地與jquery)前面加上「http://www.domain.com」到每個這些鏈接。

回答

3
$('a').attr('href', 'http://www.domain.com'+$(this).attr('href')); 
+1

該值解析一次,而不是每個節點,所以它很奇怪它適用於你。下面有正確的答案。 – greenoldman 2014-01-12 22:00:59

1

我不推薦使用javascript解決此問題。這應該在頁面模板中解決。但是,如果你仍然想要一個jQuery解決方案,那麼你去。假設這些鏈接有區別於內部鏈接特定類:

$('a.external').each(function() { 
    $(this).attr('href', domain_name + $(this).attr('href')); 
}) 
2

請注意,jQuery對象$( 「A」)ATTR( 「HREF」)不等於$(「一個。 「).get(0).href?

$("a").each(function() { 
    alert(this.href); 
    $(this).attr("href") = this.href; 
}); 

在你的情況下,這可能不會幫助你,因爲你想要靜態標記,javascript生成動態內容。但似乎你想要靜態標記,在這種情況下,它必須由服務器發出。

+0

你應該整理你的代碼片段。 – SpoonMeiser 2009-12-11 16:16:51

1

你不需要jQuery的這樣一個簡單的功能....

var elements = document.getElementsByTagName("a"); 
var eachLink; 
for (eachLink in elements) { 
var relativeLink = eachLink.href; 
var absoluetLink = ["http://",domainName,"relativeLink"]; 
eachLink.href = absoluteLink.join(""); 
} 

這樣的事情應該工作,而且運行速度更快,你不會只是需要加載整個jQuery庫運行6行代碼:P

0

我注意到這裏的所有解決方案只適用於以「/」字符開頭的href屬性。如果你想要更強大的功能,你可以試試js-uri庫。它看起來很酷,但我沒有自己嘗試過,所以我不知道它有多麼怪異。

1

這很簡單:

$('a').each(function(){$(this).attr('href',this.href);}); 

當你讀到一個HTMLAnchorElement的href屬性,你得到的絕對路徑,這樣你就可以使用jQuery的ATTR()方法將其覆蓋。

相關問題