繁体   English   中英

清除#而不重新加载页面

[英]Clear the # without reloading the page

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

以此类推,直至无穷大。

如何解决呢?

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

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

如果您只想分割当前网址的路径部分,则不要使用

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

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

采用

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

代替。

更改哈希不会刷新您的页面。 最多只能强制浏览器滚动到顶部。 如果您愿意,可以执行以下操作:

window.location.hash = ""; 

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM