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.

5voto

user2465270 Punkte 51
function getHash() {
  if (window.location.hash) {
    var hash = window.location.hash.substring(1);

    if (hash.length === 0) { 
      return false;
    } else { 
      return hash; 
    }
  } else { 
    return false; 
  }
}

5voto

Graham Punkte 241
var requestedHash = ((window.location.hash.substring(1).split("#",1))+"?").split("?",1);

5voto

Die meisten Leute kennen die URL-Eigenschaften in document.location. Das ist großartig, wenn Sie nur an der aktuellen Seite interessiert sind. Aber die Frage war über in der Lage sein, Anker auf einer Seite nicht die Seite selbst zu analysieren.

Was die meisten Menschen zu übersehen scheinen, ist, dass dieselben URL-Eigenschaften auch für Ankerelemente verfügbar sind:

// To process anchors on click    
jQuery('a').click(function () {
   if (this.hash) {
      // Clicked anchor has a hash
   } else {
      // Clicked anchor does not have a hash
   }
});

// To process anchors without waiting for an event
jQuery('a').each(function () {
   if (this.hash) {
      // Current anchor has a hash
   } else {
      // Current anchor does not have a hash
   }
});

3voto

commonpike Punkte 9386

Die obigen Kommentare von Partridge und Gareth sind großartig. Sie verdienen eine eigene Antwort. Offensichtlich sind Hash- und Sucheigenschaften für jedes html-Link-Objekt verfügbar:

<a id="test" href="foo.html?bar#quz">test</a>
<script type="text/javascript">
   alert(document.getElementById('test').search); //bar
   alert(document.getElementById('test').hash); //quz
</script>

Oder

<a href="bar.html?foo" onclick="alert(this.search)">SAY FOO</a>

Sollten Sie dies für eine normale String-Variable benötigen und zufällig jQuery zur Hand haben, sollte dies funktionieren:

var mylink = "foo.html?bar#quz";

if ($('<a href="'+mylink+'">').get(0).search=='bar')) {
    // do stuff
}

(aber das ist vielleicht ein bisschen übertrieben .. )

3voto

Barney Punkte 15769

Throwing dies in hier als eine Methode für die Abstraktion Standort Eigenschaften von beliebigen URI-ähnliche Zeichenfolgen. Obwohl window.location instanceof Location wahr ist, wird jeder Versuch, die Location wird Ihnen mitteilen, dass es sich um einen illegalen Konstruktor handelt. Sie können immer noch zu Dingen gelangen wie hash , query , protocol usw., indem Sie Ihre Zeichenkette als href Eigenschaft eines DOM-Anker-Elements, das dann alle Adresseigenschaften mit window.location .

Am einfachsten ist dies zu bewerkstelligen:

var a = document.createElement('a');
a.href = string;

string.hash;

Der Einfachheit halber habe ich eine kleine Bibliothek geschrieben, die dies nutzt, um die native Location Konstruktor mit einem, der Zeichenketten annimmt und erzeugt window.location -ähnliche Objekte: Standort.js

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