929 Stimmen

Wie kann man mit JavaScript nach einem #hash in einer URL suchen?

Ich habe einige jQuery/JavaScript-Code, den ich nur ausführen möchte, wenn es eine Raute ( # ) Anker-Link in einer URL. Wie kann man mit JavaScript auf dieses Zeichen prüfen? Ich brauche einen einfachen Catch-All-Test, der URLs wie diese erkennen würde:

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

Im Grunde genommen etwas in der Art von:

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

Wenn mir jemand den richtigen Weg weisen könnte, wäre ich sehr dankbar.

1voto

Rolando Punkte 131

In der Regel wird zuerst geklickt und dann der Standort gewechselt, daher ist es eine gute Idee, nach einem KlickTimeOut zu setzen zu setzen, um einen aktualisierten window.location.hash zu erhalten.

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

oder Sie können den Standort mit anhören:

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

Ich schrieb eine jQuery-Plugin die so etwas macht wie was Sie tun wollen.

Es ist ein einfacher Anker-Router.

1voto

dnns Punkte 306

Hier ist eine einfache Funktion, die Folgendes zurückgibt true o false (hat / hat keinen Hashtag):

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
}

Rückgabe true in diesem Fall.

In Anlehnung an den Kommentar von @jon-skeet.

1voto

aabiro Punkte 2802

Dies ist eine einfache Möglichkeit, dies für die aktuelle Seiten-URL zu testen:

  function checkHash(){
      return (location.hash ? true : false);
  }

1voto

Uzair Ashraf Punkte 1007

Mir ist aufgefallen, dass all diese Antworten meist window.location.hash überprüfen und es schwierig machen, Tests zu schreiben.

 const hasHash = string => string.includes('#')

Sie können die Raute auch wie folgt aus einer Url entfernen:

const removeHash = string => {
 const [url] = string.split('#')
 return url
}

Und schließlich können Sie die Logik miteinander kombinieren:

if(hasHash(url)) {
 url = removeHash(url)
}

-2voto

markg Punkte 279

Manchmal erhält man den vollständigen Abfrage-String wie "#anchorlink?firstname=mark".

Dies ist mein Skript, um den Hash-Wert zu erhalten:

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

returns -> #anchorlink

8 Stimmen

Nicht möglich, da der Hash an den Abfrage-String angehängt und nie an den Server gesendet wird. Das einzige Mal, dass der Hash vor dem Query-String erscheint, ist, wenn Sie die URL von Hand ändern.

1 Stimmen

Ja, aber manchmal senden die Leute Urls in diesem Format. Das ist nur so, dass Sie nur den Hash-Wert erhalten und die anderen vernachlässigen können. :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X