我试图在我的哈希标志之后找到字符串,所以当用户重新加载页面时,我只能查看该字符串,然后动态加载正确的页面。我的网址看起来像http://mysite.com/#!/account/
。我如何只检索/ account /?我试过用这个:
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 :(得分:4)
使用window.location.hash
。对于网址http://mysite.com/#!/account/
,它将返回#!/account/
。现在,只需使用正则表达式取消前面的#!
:
window.location.hash.replace(/^#\!/,"")
上面的代码会为您提供/account/
。
window.location.hash.substring(2)
答案 1 :(得分:3)
你可以使用
window.location.hash
答案 2 :(得分:1)
window.location对象有一个hash属性,它包含has符号之后的所有内容(包括)。要获取#之后的所有内容,请取下前导哈希符号:
window.location.hash.substring(1)
答案 3 :(得分:1)
另外,请考虑查看一些JavaScript路由库,例如
答案 4 :(得分:1)
您可以尝试查看Crossroads和Hasher库。你可以把它们放在一起做我认为你想做的事情。
// 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