jquery平滑滚动后从url和历史记录中删除锚

jquery平滑滚动后从url和历史记录中删除锚,jquery,html,url,anchor,browser-history,Jquery,Html,Url,Anchor,Browser History,我有一个页面,使用jquery1.10和jquery,可以平滑滚动锚链接。平滑的滚动效果很好。单击“返回顶部”链接后,一个项目将添加到用户的历史记录中,并在url中可见(如domain.com/page#header),这是预期的 但是,因为这会弄乱url并破坏“后退”按钮的功能,我正在尝试从url和浏览器历史记录中删除锚。我尝试过几种方法来删除锚链接或历史记录项,但它们都会与平滑滚动的代码产生冲突 所以我的问题是,有人知道在平滑滚动完成后,我如何从url中删除这个锚并删除最后一个历史记录项吗

我有一个页面,使用jquery1.10和jquery,可以平滑滚动锚链接。平滑的滚动效果很好。单击“返回顶部”链接后,一个项目将添加到用户的历史记录中,并在url中可见(如
domain.com/page#header
),这是预期的

但是,因为这会弄乱url并破坏“后退”按钮的功能,我正在尝试从url和浏览器历史记录中删除锚。我尝试过几种方法来删除锚链接或历史记录项,但它们都会与平滑滚动的代码产生冲突

所以我的问题是,有人知道在平滑滚动完成后,我如何从url中删除这个锚并删除最后一个历史记录项吗

例如:

编辑:我没有删除这个问题,因为我很难准确地知道我需要做什么,即使我看到了其他问题的答案(它们解决了一个稍微不同的问题,并且没有明确地解决添加的历史记录项)。因此,我将把这个留给那些与我有同样问题的人。


平滑滚动的代码:

$(文档).ready(函数(){
函数筛选器路径(字符串){
返回字符串
.替换(/^\/,'')
.replace(/(索引|默认值)。[a-zA-Z]{3,4}$/,“”)
.替换(/\/$/,'');
}
var locationPath=filterPath(location.pathname);
var scrolleem=scrollableElement('html','body');
$('a[href*=#]')。每个(函数(){
var thisPath=filterPath(this.pathname)| | locationPath;
如果(locationPath==此路径
&&(location.hostname==this.hostname | |!this.hostname)
&&this.hash.replace(/#/,''){
var$target=$(this.hash),target=this.hash;
如果(目标){
var targetOffset=$target.offset().top;
$(此)。单击(函数(事件){
event.preventDefault();
$(scrollElem).animate({scrollTop:targetOffset},400,function(){
location.hash=目标;
});
});
}
}
});
//使用第一个“可滚动”的元素
函数可滚动元素(els){
for(var i=0,argLength=arguments.length;i 0){
返回el;
}否则{
$scrollElement.scrollTop(1);
变量isScrollable=$scrollElement.scrollTop()>0;
$scrollElement.scrollTop(0);
如果(可循环使用){
返回el;
}
}
}
返回[];
}
});

您只需在脚本末尾添加下面的一段代码,它将清除根目录下的所有查询字符串或任何其他内容

history.replaceState({}, '', '/'); 

您只需在脚本末尾添加下面的一段代码,它将清除根目录下的所有查询字符串或任何其他内容

history.replaceState({}, '', '/'); 

您可以通过这段代码实现相同的功能,而不是指向div

在application.js中

function show_top(){
    if( $(document).scrollTop !=0 ){
        $ ('html, body').animate ( { scrollTop:0 } ,1000 );
    }
}
鉴于

<a href="javascript:" onclick="show_top()">GO TO TOP</a>

您可以通过这段代码实现相同的功能,而不是指向div

在application.js中

function show_top(){
    if( $(document).scrollTop !=0 ){
        $ ('html, body').animate ( { scrollTop:0 } ,1000 );
    }
}
鉴于

<a href="javascript:" onclick="show_top()">GO TO TOP</a>

我通过注释下面的一段代码解决了这个问题:

location.hash = target; // comment by putting two forward slashes in front of this line of code

它在未注释时显式地将哈希添加到url。多亏了杰夫B,在。它还解决了添加的历史记录项,因此“后退”按钮再次按预期工作。

我通过注释以下代码位解决了此问题:

location.hash = target; // comment by putting two forward slashes in front of this line of code

它在未注释时显式地将哈希添加到url。多亏了杰夫B,在。它还解决了添加的历史记录项,因此“后退”按钮再次按预期工作。

感谢您的回答!我试过了,但它也会从url中清除我的页面名,而不仅仅是锚。因此,url将从
domain.com/page#top
清除到
domain.com
。但我要做的是把它放到
domain.com/page
。你知道怎么做吗?只需用这一行history.replaceState({},,'/page');是的,但这需要将该页面动态更改为当前页面的名称(我有多个页面正在使用此脚本)。或者,我必须为每个页面提供不同版本的脚本。。如果只清除url中的锚,而不是将url完全清除到根地址,这不是更简单吗?谢谢您的回答!我试过了,但它也会从url中清除我的页面名,而不仅仅是锚。因此,url将从
domain.com/page#top
清除到
domain.com
。但我要做的是把它放到
domain.com/page
。你知道怎么做吗?只需用这一行history.replaceState({},,'/page');是的,但这需要将该页面动态更改为当前页面的名称(我有多个页面正在使用此脚本)。或者,我必须为每个页面提供不同版本的脚本。。如果只从url中清除锚点,而不是将url完全清除到根地址,这不是更简单吗?但是,我想尝试使用锚点,因为对于那些没有启用javascript的人来说,它会更优雅地降级。但是谢谢你的建议!然而,我想尝试使用锚,因为对于那些没有启用javascript的人来说,锚会更优雅地降级。但是谢谢你的建议!