2013-04-22 2 views
2

Я использую JavaScript для перехода к якорям на главной странице. На главной странице, когда я нажимаю ссылку привязки, URL-адрес остается тем же: localhost/(используя javascript ScrollTo), но когда я пытаюсь связать этот тег привязки с отдельной страницы, он отображает якорный тэг в URL-адресе. локальный/# якорь.Rails hide #anchor tag в URL

Как я могу замаскировать 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; 
     } 
    } 
+0

, которые библиотека обеспечивают этот метод scrollTo, прототип? JQuery? Ответ может быть совсем другим. –

+0

Да, я использую jquery. Код, вставленный ниже. – agassi0430

ответ

4

При нажатии на якорь на главной странице вы на самом деле не представившего запрос на Rails, вы просто выполняет обработчик щелчка. Но когда вы отправляетесь с другой страницы, вы получаете : отправляет запрос Rails, а #фрагмент - единственный способ узнать, где на странице прокручивается страница.

Best вы можете сделать, это обнаружить #fragment в JS при загрузке страницы, выделите нужное место, и удалить фрагмент с

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

если у вас есть браузер, который поддерживает replaceState. Вы можете использовать History.js, если хотите быть добрым к старым браузерам.

0

Вы можете сделать window.location.hash.replace('#', '');