2013-06-02 239 views
2

我正在將所有網站的頁面加載到主索引頁面,並通過將href拆分爲段並使用.hash功能在主域名之後添加段來更新URL顯示,如下所示:清除#無需重新加載頁面

$('a').click(function(event) { 
event.preventDefault(); 
var my_url = this.href; 

var pathArray = this.href.split('/'); 

var newPathname = ""; 
for (i = 3; i < pathArray.length; i++) { 
    newPathname += "/"; 
    newPathname += pathArray[i]; 
} 

$('body').load(my_url); 
window.location.hash = newPathname; 

這工作正常,但我面臨一個小問題。當用戶訪問http://www.mywebsite.com/然後單擊,例如,在「關於」鏈接,選擇的頁面加載,並在地址欄顯示:

http://www.mywebsite.com/#/about

但是,如果用戶使用不同的頁面開始:

http://www.mywebsite.com/#/about

然後點擊後,鏈接變成:

http://www.mywebsite.com/#/about/#/about

等等無窮大。

這怎麼解決?

也許有一種方法可以清除散列,然後顯示新的散列(即刪除以#/開頭的所有內容,然後添加新散列) - 或者有更好的解決方案?

回答

3

嘗試var my_url = this.href.replace(/#.*/,'')
這將刪除#及其後的任何東西。

+0

美麗。謝謝你,@ Kinkink! –

+0

其實,@Kolink,即使你的答案是我正在尋找的答案,但它揭示了該網站的另一個問題。在網址中沒有散列的頁面,如下所示:'http:// www.mywebsite.com/about' - 仍然會這樣做:'http://www.mywebsite.com/about /#/ about' - 你的代碼片段如何修改以解決這個問題呢? –

+0

嗯......沒有什麼可以做到的,因爲那需要改變路徑本身的一部分,強制重新加載。我看到它發生在Facebook上幾次,所以我猜測沒有真正的解決方案! –

1

更改散列不會刷新您的頁面。最多它強制瀏覽器滾動頂部。如果你願意,你可以這樣做:

window.location.hash = ""; 

清空它(保留#),如果您還刪除從HREF的#那麼你的頁面會一直刷新。

+0

其實,有似乎是沒有更新的散列的內容的方式 - 我欠了很多人這是怎麼在這裏做誰可以給我解釋一下:http://www.asual.com/jquery/address/samples/express/ –

+0

@用jquery你可以這樣做:'$(window).unload(function(evt){evt.preventDefault()});' – fmsf

+0

你能告訴我更多關於這個的信息嗎,@fmsf?該片段應放在哪裏,它有什麼作用?實際上任何代碼是否在大括號之間? –

2

如果要拆分只是當前URL的路徑組件,則不要使用

var pathArray = this.href.split('/'); 

因爲href將包含完整路徑包括散列。

使用

var pathArray = this.pathname.split('/'); 

代替。

+0

謝謝@CBroe,這很有用。 (我這樣做很難,通過從結果數組中刪除0-3部分; ;-) –

相關問題