清除#而不重新加载页面

时间:2013-06-02 14:51:40

标签: javascript

我将所有网站的页面加载到主索引页面,并通过将href拆分成段并使用.hash函数在主域名之后添加段来更新URL显示,如下所示:

$('a').click(function(event) {
event.preventDefault();
var my_url = this.href;

var pathArray = this.href.split('/');

var newPathname = "";
for ( i = 3; i < pathArray.length; i++ ) {
  newPathname += "/";
  newPathname += pathArray[i];
}

$('body').load(my_url);
window.location.hash = newPathname;

这没关系,但我遇到了一个小问题。当用户访问http://www.mywebsite.com/然后单击(例如)“关于”链接时,将加载所选页面,并显示地址栏:

http://www.mywebsite.com/#/about

但是如果用户以不同的页面开头:

http://www.mywebsite.com/#/about

然后点击后,网址变为:

http://www.mywebsite.com/#/about/#/about

等等,无限。

如何解决这个问题?

也许有一种方法可以清除哈希然后显示新哈希(也就是说,删除所有以#/开头的内容然后添加新哈希) - 或者可能有更好的解决方案?

3 个答案:

答案 0 :(得分:3)

尝试var my_url = this.href.replace(/#.*/,'')
这将删除#及之后的任何内容。

答案 1 :(得分:2)

如果您只想拆分当前网址的路径组件,请不要使用

var pathArray = this.href.split('/');

因为href将包含完整路径,包括哈希。

使用

var pathArray = this.pathname.split('/');

代替。

答案 2 :(得分:1)

更改哈希不会刷新您的页面。它最多会强制浏览器滚动顶部。如果你想要你能做到:

window.location.hash = ""; 

要清空它(保留#),如果您还从href中删除#,那么您的页面将始终重新加载。