JavaScript在散列后检索字符串

JavaScript retrieve string after hash

本文关键字:检索 字符串 JavaScript      更新时间:2023-09-26

我试图在我的哈希符号后面找到字符串,这样当用户重新加载页面时,我可以只查看该字符串,然后动态加载正确的页面。我的url看起来像这个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');
}

如果我在oldLoc变量中放入一个类似http://mysite.com/#!/account/的值,这会很好,但如果我放入我所拥有的,就会出现以下错误:

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

1) 为什么这个不起作用,我试过所有不同的组合window.location,document.location,都不起作用
2) 有没有一种更简单的方法可以找到页面的哈希值,然后如上所示加载正确的页面?

谢谢!

使用window.location.hash。对于URL http://mysite.com/#!/account/,它将返回#!/account/。现在,只需使用正则表达式将#!从前面去掉即可

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

以上代码将为您提供/account/

编辑:你也可以使用这个:

window.location.hash.substring(2)

您可以使用

window.location.hash

window.location对象有一个hash属性,它包含has符号之后(包括)的所有内容。要获取#之后的所有内容,请去掉前导哈希符号:

window.location.hash.substring(1)

还可以考虑一下一些JavaScript路由库,如

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

您可以尝试查看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