2012-02-15 81 views
1

我試圖在我的哈希符號後面找到字符串,因此當用戶重新加載頁面時,我只能看看該字符串,然後動態加載正確的頁面。我的網址是這樣的http://mysite.com/#!/account/。我如何檢索/帳戶/?我一直在使用這種嘗試:哈希後的JavaScript檢索字符串

var oldLoc = window.location, 
patt = /#!(.+)/, 
newLoc = oldLoc.match(patt)[1]; // This returns `/account/settings` 

if (newLoc == '' || newLoc == '#!/' || newLoc == '/#!' || newLoc == '/#!/') { 
    $('#reload_section').load('main.php'); 
} else if (newLoc == '/newsfeed/') { 
    $('#reload_section').load('newsfeed.php'); 
} else if (newLoc == '/account/') { 
    $('#reload_section').load('account.php'); 
} else if (newLoc == '/search/') { 
    $('#reload_section').load('ajaxsearch.php'); 
} 

這工作得很好,如果我把一個價值像http://mysite.com/#!/account/oldLoc可變的,但如果我把我把它給了我這個錯誤:

TypeError: 'undefined' is not a function (evaluating 'oldLoc.match(patt)') 

1)爲什麼不能這樣工作,我嘗試了所有不同的組合window.location,document.location,沒有任何作用。
2)是否有更簡單的方法來查找頁面的散列值,然後如上所示加載正確的頁面?

謝謝!

+0

我回滾您的編輯;解決方案應該作爲問題的答案發布,而不是作爲問題的一部分。 – yoozer8 2013-04-04 18:49:04

回答

4

使用window.location.hash。對於網址http://mysite.com/#!/account/,它將返回#!/account/。現在,只需把#!關閉前的用正則表達式:

window.location.hash.replace(/^#\!/,"") 

上面的代碼將會給你/account/

編輯:您還可以使用這樣的:

window.location.hash.substring(2) 
+0

非常感謝,window.location.hash.replace(/ ^#\!/,「」)工作完美! – 2012-02-15 04:12:06

+0

不客氣。使用'substring(2)'的缺陷是前兩個字符會被刪除,而不管它們是什麼。 – wecsam 2012-02-15 04:17:55

3

可以使用

window.location.hash 
+0

會給:#!/ account/..... – Kevin 2012-02-15 04:04:15

+0

它會給你後者。 – Purag 2012-02-15 04:04:23

+0

好的,有什麼方法可以刪除#!如果不是這樣,就以'/ account'結尾。 – 2012-02-15 04:06:17

1

的window.location的對象具有包含一切之後(含)的哈希屬性具有象徵。要獲取#之後的一切,騰飛的龍頭井號:

window.location.hash.substring(1) 
+0

這會給我'/ account /'? – 2012-02-15 04:03:55

+0

否這會給!/ account /如果您想要刪除感嘆號,請將1更改爲2.這將刪除後續字符。 – kevinAlbs 2012-02-15 04:05:59

1

也會考慮在像一些JavaScript路由庫考慮看看,

  • Crossroads.js(僅路由)
  • Backbone.js(提供一般的客戶端應用程序結構,其中包括一個有助於支持pushState的有用路由器)
1

你可以試試看看CrossroadsHasher庫。你可以把它們放在一起做我認爲你想要做的事情。

// setup your routes 
crossroads.addRoute('newsfeed.php', function() { 
    // do some stuff 
}); 

//setup hasher 
hasher.initialized.add(crossroads.parse, crossroads); //parse initial hash 
hasher.changed.add(crossroads.parse, crossroads); //parse hash changes 
hasher.init(); //start listening for history change