我正在使用JavaScript导航到主页面上的锚点。在主页面内,当我点击锚链接时,网址保持不变:localhost /(使用javascript ScrollTo),但是当我尝试从单独的页面链接到该锚标记时,它会在网址中显示锚标记。本地主机/#锚
如何屏蔽网址以不显示锚标记?
<li><%= link_to "Anchor", root_path(:anchor => 'anchor') %></li>
jquery的:
$('a[href*=#]:not([href=#])').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'')
|| location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
if (target.length) {
$('html,body').animate({
scrollTop: target.offset().top
}, 1000);
return false;
}
}
答案 0 :(得分:4)
当您单击主页面上的锚点时,您实际上并未向Rails提交请求,而只是执行单击处理程序。但是当你来自另一个页面时,你 向Rails提交请求,而#fragment是任何人知道页面滚动到哪里的唯一方法。
你可以做的最好是在加载页面时检测JS中的#fragment,滚动到正确的位置,然后用
删除片段history.replaceState({}, '', window.location.href.substring(0, window.location.href.indexOf('#')))
假设您有一个支持replaceState
的浏览器。如果你想对老版浏览器好一点,你可以使用History.js。
答案 1 :(得分:0)
您可以执行window.location.hash.replace('#', '');