Rails在URL中隐藏#anchor标记

时间:2013-04-22 22:07:09

标签: ruby-on-rails url anchor

我正在使用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;
        }
    }

2 个答案:

答案 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('#', '');