Jak uzyskać identyfikator fragmentu (wartość po haszu #) z adresu URL?

212

Przykład:

www.site.com/index.php#hello

Korzystając z jQuery, chcę umieścić wartość hellow zmiennej:

var type = 
cppit
źródło
Nie jestem pewien, czy pytanie to powinno pozostać oznaczone jako jQuery i pytać o to. Większość odpowiedzi dotyczy JS bez jQuery i wydaje się, że to dobry cel dupe.
user4642212

Odpowiedzi:

585

Nie potrzebujesz jQuery

var type = window.location.hash.substr(1);
Musa
źródło
154
Za mało jQuery! (Tylko żartuję: +1.)
nnnnnn
2
Właśnie dowiedziałem się, że # może być używany jako „skrót”, który działa jako identyfikator / słowo kluczowe w JavaScript. Niesamowite
Clain Dsilva,
13
Możesz również użyć .slice(1)zamiast tego, .substr(1)który powinien oferować niewielki wzrost wydajności, chociaż nie ma to znaczenia w prawdziwym życiu.
devius
3
OMG, ile razy trzeba sprawdzać skrót adresu URL, aby DOWOLNA zauważalna różnica? Milion? „Skromny wzrost” jest w tym kontekście ogromnym zawyżeniem. :-)
konrad
37

Możesz to zrobić za pomocą następującego kodu:

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

ZOBACZ DEMO

Ahsan Khurshid
źródło
4
Uwaga: indexOf nie jest obsługiwany przez IE8
Sebastiaan Ordelman
4
@SchalkKeun na szczęście, teraz w 1818 już prawie nie ma. Ale dla tych, którzy wciąż mają do czynienia z tą legendą, powinni być tego świadomi.
Sebastiaan Ordelman,
6
Szczerze mówiąc, IE8 jest tak niepewny, że wszystkie bramki płatności po prostu odrzucą każdą przeglądarkę nieobsługującą TLS 1.2 w przyszłym tygodniu (30 czerwca 2018 r.), W ogóle nie będzie można z nich dokonywać płatności. To sprawia, że ​​wszystkie te gówniane przeglądarki są bezużyteczne dla każdego klienta e-commerce.
Schalk Keun
13
var url ='www.site.com/index.php#hello';
var type = url.split('#');
var hash = '';
if(type.length > 1)
  hash = type[1];
alert(hash);

Działa demo na jsfiddle

Talha
źródło
ifOświadczenie może zostać skrócony do var hash = type[1] || "";.
user4642212,
6

Miałem adres URL od czasu wykonywania, poniżej podałem poprawną odpowiedź:

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

mam nadzieję że to pomoże

Manohar Reddy Poreddy
źródło
6

To jest bardzo łatwe. Wypróbuj poniższy kod

$(document).ready(function(){
  var hashValue = location.hash.replace(/^#/, '');  
  //do something with the value here  
});
kmario23
źródło
3
var hashValue = location.hash.replace (/ ^ # /, '');
flakerimi,
3

W oparciu o kod AK, tutaj jest funkcja pomocnicza. 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);
Ro Hit
źródło