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


212

Приклад:

www.site.com/index.php#hello

За допомогою jQuery я хочу поставити значення helloв змінну:

var type = 

Я не впевнений, чи варто залишати це питання тегом jQuery і запитувати про нього. Більшість відповідей стосуються JS без jQuery, і це здається гарною цільовою умовою.
user4642212

Відповіді:


585

Не потрібно jQuery

var type = window.location.hash.substr(1);

154
Не вистачає jQuery! (Жартую: +1.)
nnnnnn

2
Щойно я дізнався, що # можна використовувати як "хеш", який працює як ідентифікатор / ключове слово в JavaScript. Awesome
Clain Dsilva

13
Ви також можете використовувати .slice(1)замість цього, .substr(1)який повинен пропонувати незначне підвищення продуктивності, хоча це не має ніякої різниці в реальному житті.
відхилення

3
OMG, скільки разів вам потрібно перевірити хеш URL-адрес, щоб зробити будь-яку помітну різницю? Мільйон? "Скромний приріст" є величезним завищенням у цьому контексті. :-)
konrad

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


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  
});

3
var hashValue = location.hash.replace (/ ^ # /, '');
flakerimi

3

На основі коду АК, ось функція помічника. 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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.