2012-02-15 80 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