2

我正在使用 JavaScript 导航到主页上的锚点。在主页中,当我单击锚链接时,url 保持不变:localhost/(使用 javascript ScrollTo),但是当我尝试从单独的页面链接到该锚标记时,它会在 url 中显示锚标记。本地主机/#anchor。

如何屏蔽 url 以不显示锚标记?

<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;
        }
    }
4

2 回答 2

4

当您单击主页上的锚点时,您实际上并没有向 Rails 提交请求,您只是在执行一个单击处理程序。但是,当您来自另一个页面时,您正在向 Rails 提交请求,而#fragment 是任何人都知道要滚动到页面上的哪个位置的唯一方法。

最好的办法是在加载页面时检测 JS 中的#fragment,滚动到正确的位置,然后使用

history.replaceState({}, '', window.location.href.substring(0, window.location.href.indexOf('#')))

假设您有一个支持replaceState. 如果您想对旧版浏览器友好,可以使用History.js 。

于 2013-04-28T21:53:46.937 回答
0

你可以做window.location.hash.replace('#', '');

于 2013-05-02T21:54:34.917 回答