Wie erhalte ich die Fragmentkennung (Wert nach Hash #) von einer URL?


211

Beispiel:

www.site.com/index.php#hello

Mit jQuery möchte ich den Wert helloin eine Variable einfügen:

var type = 

Ich bin mir nicht sicher, ob diese Frage weiterhin als jQuery markiert und danach gefragt werden soll. Die meisten Antworten gelten für JS ohne jQuery, und dies scheint ein gutes Ziel zu sein.
user4642212

Antworten:


585

Keine Notwendigkeit für jQuery

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

154
Nicht genug jQuery! (Nur ein Scherz: +1.)
nnnnnn

2
Ich habe gerade gelernt, dass ein # als 'Hash' verwendet werden kann, der als Bezeichner / Schlüsselwort in JavaScript fungiert. Ehrfürchtig
Clain Dsilva

13
Sie können auch verwenden, .slice(1)anstatt .substr(1)eine bescheidene Leistungssteigerung zu bieten, obwohl es im wirklichen Leben keinen Unterschied macht.
Devius

3
OMG, wie oft müssten Sie den URL-Hash überprüfen, um einen spürbaren Unterschied zu machen? Eine Million? "Bescheidener Anstieg" ist in diesem Zusammenhang eine enorme Übertreibung. :-)
Konrad

37

Sie können dies mit folgendem Code tun:

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

SIEHE DEMO


4
Hinweis: indexOf wird von IE8 nicht unterstützt
Sebastiaan Ordelman

4
@SchalkKeun zum Glück, jetzt in '18 ist es fast weg. Aber für diejenigen, die sich noch mit dieser Legende auseinandersetzen müssen, sollte man sich dessen bewusst sein.
Sebastiaan Ordelman

6
Um ehrlich zu sein, IE8 ist so unsicher, dass alle Zahlungsgateways in der nächsten Woche (30. Juni 2018) jeden Browser löschen, der TLS 1.2 nicht unterstützt, sodass Sie überhaupt keine Zahlungen von ihnen ausführen können. Das macht all diese alten beschissenen Browser für jeden E-Commerce-Client unbrauchbar.
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);

Arbeitsdemo auf jsfiddle


Die ifAussage kann auf verkürzt werden var hash = type[1] || "";.
user4642212


6

Ich hatte die URL von der Laufzeit, unten gab die richtige Antwort:

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

hoffe das hilft


6

Es ist sehr leicht. Versuchen Sie den folgenden Code

$(document).ready(function(){
  var hashValue = location.hash.replace(/^#/, '');  
  //do something with the value here  
});

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

3

Basierend auf dem AK-Code ist hier eine Hilfsfunktion. 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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.