Как получить идентификатор фрагмента (значение после хеш-кода) из URL?

212

Пример:

www.site.com/index.php#hello

Используя jQuery, я хочу поместить значение helloв переменную:

var type = 
cppit
источник
Я не уверен, должен ли этот вопрос оставаться помеченным как jQuery и спрашивать об этом. Большинство ответов применимы к JS без jQuery, и это похоже на хорошую цель.
user4642212

Ответы:

585

Нет необходимости в jQuery

var type = window.location.hash.substr(1);
Musa
источник
154
Не хватает jQuery! (Шучу: +1.)
nnnnnn
2
Я только что узнал, что # можно использовать как «хэш», который работает как идентификатор / ключевое слово в JavaScript. Круто
Клин Дсилва
13
Вы также можете использовать .slice(1)вместо .substr(1)которого должно предлагать умеренное увеличение производительности, хотя в реальной жизни это не имеет значения.
Деви
3
О боже, сколько раз вам нужно было проверять хеш URL, чтобы иметь ЛЮБУЮ заметную разницу? Миллион? «Скромное увеличение» в этом контексте является огромным преувеличением. :-)
Конрад
37

Вы можете сделать это, используя следующий код:

var url = "www.site.com/index.php#hello";
var hash = url.substring(url.indexOf('#')+1);
alert(hash);

СМОТРЕТЬ ДЕМО

Ахсан Хуршид
источник
4
Примечание: indexOf не поддерживается IE8
Себастьян Ордельман
4
@SchalkKeun, к счастью, сейчас в 18 году его почти нет. Но те, кому еще предстоит разобраться с этой легендой, должны об этом знать.
Себастьян Ордельман
6
Честно говоря, IE8 настолько небезопасен, что все платежные шлюзы в основном будут отбрасывать любой браузер, не поддерживающий TLS 1.2, на следующей неделе (30 июня 2018 года), и вы вообще не сможете совершать платежи из них. Так что все эти старые дрянные браузеры бесполезны для любого клиента электронной коммерции.
Шальк Кеун
13
var url ='www.site.com/index.php#hello';
var type = url.split('#');
var hash = '';
if(type.length > 1)
  hash = type[1];
alert(hash);

Рабочая демонстрация на jsfiddle

Talha
источник
ifЗаявление может быть сокращено до var hash = type[1] || "";.
user4642212
6

У меня был URL от времени выполнения, ниже дал правильный ответ:

let url = "www.site.com/index.php#hello";
alert(url.split('#')[1]);

надеюсь это поможет

Манохар Редди Поредди
источник
6

Это очень просто. Попробуйте код ниже

$(document).ready(function(){
  var hashValue = location.hash.replace(/^#/, '');  
  //do something with the value here  
});
kmario23
источник
3
var hashValue = location.hash.replace (/ ^ # /, '');
Флакерими
3

Основываясь на коде AK, вот вспомогательная функция. JS Fiddle Here ( http://jsfiddle.net/M5vsL/1/ ) ...

// Helper Method Defined Here.
(function (helper, $) {
    // This is now a utility function to "Get the Document Hash"
    helper.getDocumentHash = function (urlString) {
        var hashValue = "";

        if (urlString.indexOf('#') != -1) {
            hashValue = urlString.substring(parseInt(urlString.indexOf('#')) + 1);
        }
        return hashValue;
    };
})(this.helper = this.helper || {}, jQuery);
Ро Хит
источник