2016-06-05 7 views
3

Я искал способ предотвратить быть доставлен в верхней части страницы после нажатия на ссылку с # внутри href атрибута:Понимание <a href = "#!"

<a href="#" onclick="foobar()">click me</a> 

и потом я наткнулся на это простое решение, переключение # для #!:

<a href="#!" onclick="foobar()">click me</a> 

Существовали различные другие решения доступны в Интернете с помощью JQuery, например:

$('.service').click(function(e) { 
    e.preventDefault(); 
}); 

Я закончил тем, что любил #! максимум за то, что так чистый НО Я НЕ СМОГ найти любую документацию в любом месте в Интернете, как к тому, что было на самом деле происходит при вставке ! в строке кода.

ВОПРОС:

Что #! фактически вызывает HTML-код, чтобы сделать? Является ли это хорошим способом предотвратить действие по умолчанию для перехода пользователя в начало страницы или это плохой метод по другим причинам? Я боюсь, что это может быть хакерский метод, который несовместим с некоторыми браузерами.

+0

Нашли ответ на ваш вопрос в следущей должности: http://stackoverflow.com/a/6349758/736172 – Ahmad

ответ

8

Что такое #! Фактически возникает код html?

Сообщается обозревателю, что при нажатии этой ссылки он должен прокручивать страницу до якоря !. Поскольку на странице нет такого якоря, страница не перемещается. (Технически, вы могли иметь якорь с именем ! на странице [! является вполне допустимым значением HTML id]. Это просто ... Вы, наверное, нет.)

Вы создаете якорь на странице путем назначения значений id элементам (или с использованием устаревшей конструкции <a name="...">...</a>); href s с идентификатором фрагмента (бит, следующий за #), сообщит обозревателю, чтобы загрузить ресурс (в вашем примере это уже загруженная страница), а затем прокрутите вниз до этого якоря. Так, например, если у вас есть <div id="foo">...</div> на странице, перейдите на #foo на этой странице, браузер прокрутит вниз, чтобы этот div показывался. Когда вы поставляете несуществующий якорь, прокрутка не выполняется.

+1

Спасибо T.J. просто протестировали его со случайными буквами, такими как 'href =" # dsf "', и это также работает, точно так же, как ваш ответ иллюстрирует – Webeng

+2

@Webeng: Сторона примечания: '#!' раньше использовалась в Google [* Создание приложений AJAX crawlable * ] (https://developers.google.com/webmasters/ajax-crawling/docs/learn-more#current-practice) с 2009 года (в основном вы сделали '#! foo = bar', и он сказал роботу Googlebot запросить жестко закодированные HTML-версия того, как это будет выглядеть); они [устарели] (https://webmasters.googleblog.com/2015/10/deprecating-our-ajax-crawling-scheme.html) эту рекомендацию в 2015 году. –

+0

Полезно знать. Я также заметил, что url содержит '#!'после нажатия ссылки и решил воспользоваться этой функцией не только не в верхней части страницы, но и дать пользователю интересное сообщение, например' # enjoy_your_stay', в то время как, конечно, не имеет идентификатора 'enjoy_your_stay' на странице – Webeng

Смежные вопросы