Как вы можете проверить #hash в URL с помощью JavaScript?

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

  • example.com/page.html#anchor
  • example.com/page.html#anotheranchor

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

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

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

+729
источник поделиться
18 ответов

Простой:

if(window.location.hash) {
  // Fragment exists
} else {
  // Fragment doesn't exist
}
+1306
источник
  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
  }
+296
источник
другие ответы

Связанные вопросы


Похожие вопросы

Введите следующее:

<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>
+49
источник

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

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

if (hash) {
    alert(hash)
} else {
    // do something else
}
+29
источник

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

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

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

+18
источник
$('#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!
});

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

+15
источник
window.location.hash 

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

+12
источник

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

$('a[href^="#"]')
+10
источник

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

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);
}
+6
источник

Большинство людей знают о свойствах URL в документе .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
   }
});
+5
источник
function getHash() {
  if (window.location.hash) {
    var hash = window.location.hash.substring(1);

    if (hash.length === 0) { 
      return false;
    } else { 
      return hash; 
    }
  } else { 
    return false; 
  }
}
+4
источник

Замечания Partridge и Gareths выше замечательны. Они заслуживают отдельного ответа. По-видимому, свойства хэша и поиска доступны для любого объекта html Link:

<a id="test" href="foo.html?bar#quz">test</a>
<script type="text/javascript">
   alert(document.getElementById('test').search); //bar
   alert(document.getElementById('test').hash); //quz
</script>

или

<a href="bar.html?foo" onclick="alert(this.search)">SAY FOO</a>

Если вам нужно это на регулярной строковой переменной и, случается, с jQuery, это должно работать:

var mylink = "foo.html?bar#quz";

if ($('<a href="'+mylink+'">').get(0).search=='bar')) {
    // do stuff
}

(но его, возможно, немного переборщило..)

+3
источник
var requestedHash = ((window.location.hash.substring(1).split("#",1))+"?").split("?",1);
+3
источник

Бросьте это здесь как метод абстрагирования свойств местоположения от произвольных строк, подобных URI. Хотя window.location instanceof Location истинно, любая попытка вызвать Location сообщит вам, что это незаконный конструктор. Вы можете добираться до таких вещей, как hash, query, protocol и т.д., Установив свою строку как свойство href элемента привязки DOM, который затем передаст все свойства адреса с помощью window.location.

Самый простой способ сделать это:

var a = document.createElement('a');
a.href = string;

string.hash;

Для удобства я написал небольшую библиотеку, которая использует это, чтобы заменить собственный конструктор Location тем, который будет принимать строки и создавать объекты window.location -like: Location.js

+3
источник

Обычно клики идут сначала, чем изменения местоположения, поэтому после щелчка это хорошая идея setTimeOut обновить window.location.hash

$(".nav").click(function(){
    setTimeout(function(){
        updatedHash = location.hash
    },100);
});

или вы можете прослушать местоположение с помощью:

window.onhashchange = function(evt){
   updatedHash = "#" + evt.newURL.split("#")[1]
};

Я написал плагин jQuery, который делает что-то вроде что вы хотите сделать.

Это простой якорный роутер.

+1
источник

Вот простая функция, которая возвращает true или false (имеет/не имеет хэштегов):

var urlToCheck = 'http://www.domain.com/#hashtag';

function hasHashtag(url) {
    return (url.indexOf("#") != -1) ? true : false;
}

// Condition
if(hasHashtag(urlToCheck)) {
    // Do something if has
}
else {
    // Do something if doesn't
}

Возвращает true в этом случае.

Основываясь на комментарии @jon-skeet.

0
источник

Это простой способ проверить это для URL текущей страницы:

  function checkHash(){
      return (location.hash ? true : false);
  }
0
источник

иногда вы получаете полную строку запроса, такую ​​как "#anchorlink? firstname = mark"

это мой script, чтобы получить значение хеша:

var hashId = window.location.hash;
hashId = hashId.match(/#[^?&\/]*/g);

returns -> #anchorlink
-2
источник

Посмотрите другие вопросы по меткам или Задайте вопрос