2

我正在将所有网站的页面加载到主索引页面中,并通过将 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

然后点击之后,url就变成了:

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

以此类推,直到无穷大。

如何解决?

也许有一种方法可以清除散列,然后显示新的散列(即删除以 #/ 开头的所有内容,然后添加新的散列)——或者也许有更好的解决方案?

4

3 回答 3

3

试试var my_url = this.href.replace(/#.*/,'')
这将删除#它之后的任何东西。

于 2013-06-02T14:57:29.820 回答
2

如果您只想拆分当前 URL 的路径组件,则不要使用

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

因为href将包含包括哈希在内的完整路径。

采用

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

反而。

于 2013-06-02T15:03:04.203 回答
1

更改哈希不会刷新您的页面。最多它会强制浏览器滚动到顶部。如果你愿意,你可以这样做:

window.location.hash = ""; 

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

于 2013-06-02T14:58:44.763 回答