Как вы можете проверить #hash в URL, используя JavaScript? - PullRequest
727 голосов
/ 18 ноября 2008

У меня есть некоторый код jQuery JavaScript, который я хочу запускать, только когда в URL есть хеш-ссылка (#). Как вы можете проверить этот символ с помощью JavaScript? Мне нужен простой всеобъемлющий тест, который бы определял URL-адреса, подобные этим:

  • example.com / page.html # якорь
  • example.com / page.html # anotheranchor

В основном что-то вроде:

if (thereIsAHashInTheUrl) {        
    do this;
} else {
    do this;
}

Если бы кто-нибудь мог указать мне правильное направление, это было бы очень ценно.

Ответы [ 18 ]

1303 голосов
/ 18 ноября 2008

Simple:

if(window.location.hash) {
  // Fragment exists
} else {
  // Fragment doesn't exist
}
294 голосов
/ 13 июля 2011
  if(window.location.hash) {
      var hash = window.location.hash.substring(1); //Puts hash in variable, and removes the # character
      alert (hash);
      // hash found
  } else {
      // No hash found
  }
48 голосов
/ 18 ноября 2008

Поставьте следующее:

<script type="text/javascript">
    if (location.href.indexOf("#") != -1) {
        // Your code in here accessing the string like this
        // location.href.substr(location.href.indexOf("#"))
    }
</script>
29 голосов
/ 08 марта 2012

Если URI не является местоположением документа, этот фрагмент будет делать то, что вы хотите.

var url = 'example.com/page.html#anchor',
    hash = url.split('#')[1];

if (hash) {
    alert(hash)
} else {
    // do something else
}
18 голосов
/ 18 ноября 2008

Вы пробовали это?

if (url.indexOf("#") != -1)
{
}

(где url - это URL, который вы хотите проверить, очевидно.)

15 голосов
/ 31 августа 2011
$('#myanchor').click(function(){
    window.location.hash = "myanchor"; //set hash
    return false; //disables browser anchor jump behavior
});
$(window).bind('hashchange', function () { //detect hash change
    var hash = window.location.hash.slice(1); //hash to string (= "myanchor")
    //do sth here, hell yeah!
});

Это решит проблему;)

12 голосов
/ 27 апреля 2013
window.location.hash 

вернет хеш-идентификатор

10 голосов
/ 19 апреля 2012

... или есть селектор jquery:

$('a[href^="#"]')
6 голосов
/ 06 июля 2010

Вот что вы можете сделать, чтобы периодически проверять изменение хеша, а затем вызывать функцию для обработки значения хеша.

var hash = false; 
checkHash();

function checkHash(){ 
    if(window.location.hash != hash) { 
        hash = window.location.hash; 
        processHash(hash); 
    } t=setTimeout("checkHash()",400); 
}

function processHash(hash){
    alert(hash);
}
5 голосов
/ 05 сентября 2013

Большинство людей знают о свойствах URL в document.location. Это здорово, если вас интересует только текущая страница. Но вопрос был в том, чтобы иметь возможность анализировать якоря на странице, а не на самой странице.

Большинство людей, похоже, упускают из виду то, что те же свойства URL также доступны для якорных элементов:

// To process anchors on click    
jQuery('a').click(function () {
   if (this.hash) {
      // Clicked anchor has a hash
   } else {
      // Clicked anchor does not have a hash
   }
});

// To process anchors without waiting for an event
jQuery('a').each(function () {
   if (this.hash) {
      // Current anchor has a hash
   } else {
      // Current anchor does not have a hash
   }
});
...