Якорные теги <a>не работают в хроме при использовании #

Вот код, который я использую на своей странице,

<li><a href="/explore/#Sound">Sound</a></li>

(в меню, которое отображается на всех страницах)

<a id="Sound"><a>

(на странице, на которой я хочу установить ссылку)

Я попытался добавить контент в теги с идентификатором. Но только в Chrome браузер не будет прокручиваться до тега. Эти якоря работают в IE & FF Любые идеи?

Ответ 1

Оказывается, это была ошибка в некоторых версиях хром, обходное решение для всех, кто в ней нуждается!:)

$(document).ready(function () {
        var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
        if (window.location.hash && isChrome) {
            setTimeout(function () {
                var hash = window.location.hash;
                window.location.hash = "";
                window.location.hash = hash;
            }, 300);
        }
    });

Ответ 2

Обходной ход не работал у меня, однако после нескольких дней поиска это, наконец, работало как шарм, поэтому я подумал, что стоит поделиться:

 $(function() {
       $('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;
           }
         }
       });
     });

Ответ 3

Вот моя версия ответа @Jake_ для Chrome/angular, не прокручивающегося до правильной привязки при начальной загрузке страницы с помощью ui-router (оригинальный ответ привел бы мой код к исключениям "Transition superseeded"):

angular.module('myapp').run(function($transitions, $state, $document, $timeout) {
  var finishHook = $transitions.onSuccess({}, function() { // Wait for the complete routing path to settle
    $document.ready(function() { // On DOM ready - check whether we have an anchor and Chrome
      var hash;
      var params;
      var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
      finishHook(); // Deregister the hook; the problem happens only on initial load
      if ('#' in $state.params && isChrome) {
        hash = $state.params['#']; // Save the anchor
        params = _.omit($state.params, ['id', '#']);
        $timeout(function() {
          // Transition to the no-anchor state
          $state.go('.', params, { reload: false, notify: false, location: 'replace' });
          $timeout(function() {
            // Transition back to anchor again
            $state.go('.', _.assign($state.params, { '#': hash }), { reload: false, notify: false, location: 'replace' });
          }, 0);
        }, 0);
      }
    });
  }, {invokeLimit: 1});
});

Ответ 4

Не уверен, помогает ли это вообще или нет, но я понял, что якоря в IE работают, но не в Firefox или Chrome. Я закончил тем, что добавил ## к своим якорям, и это решило проблему.

пример: a href= "## policy"> Цель и выражение о политике

вместо:

a href= "# policy"> Заявление о целях и политике

Ответ 5

У меня была и эта проблема (та же навигация по страницам с использованием ссылок), и решение было очень простым (хотя и разочаровывающим, чтобы понять). Надеюсь, это поможет - я также проверил IE, Firefox и Chrome, и это работало по всем направлениям (по состоянию на 05-22-2019).

Ваша ссылка должна выглядеть так:

<a href="pagename.html##anchorname">Word as link you want people to click</a>

и ваш якорь должен выглядеть так:

<a name="#anchorname">Spot you want to appear at top of page once link is clicked</a>

Ответ 6

 <html>
   <body>
    <li>
      <a href="#Sound">Sound</a>
    </li>
    <a id="Sound" href="www.google.com">I AM CALLED</a>
   </body>
</html>

используйте это как свой код, он будет вызывать анкерный тег с звуковым значением id

Ответ 7

Просто измените вызов по вашей ссылке на внешний.

<a href="#nlink" class="external">  </a>