JavaScript在哈希后检索字符串

时间:2012-02-15 03:57:09

标签: javascript jquery

我试图在我的哈希标志之后找到字符串,所以当用户重新加载页面时,我只能查看该字符串,然后动态加载正确的页面。我的网址看起来像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)是否有更简单的方法来查找页面的哈希值,然后加载正确的页面,如上所示?

谢谢!

5 个答案:

答案 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路由库,例如

  • Crossroads.js(仅限路由)
  • Backbone.js(提供一般客户端应用程序结构,其中包含一个支持pushState的有用路由器)

答案 4 :(得分: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