Frage

Ich habe einige jQuery / JavaScript-Code, der ich nur ausgeführt werden soll, wenn es einen Hash (#) Anker-Link in einer URL ist. Wie kann man für diesen Charakter überprüft mit Hilfe von JavaScript? Ich brauche einen einfachen Catch-all-Test, den URLs wie diese erkennen würde:

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

Im Grunde etwas entlang der Linien von:

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

Wenn jemand mich in die richtige Richtung zeigen könnte, wäre, dass sehr geschätzt.

War es hilfreich?

Lösung

Ganz einfach:

if(window.location.hash) {
  // Fragment exists
} else {
  // Fragment doesn't exist
}

Andere Tipps

  if(window.location.hash) {
      var hash = window.location.hash.substring(1); //Puts hash in variable, and removes the # character
      alert (hash);
      // hash found
  } else {
      // No hash found
  }

Setzen Sie wie folgt vor:

<script type="text/javascript">
    if (location.href.indexOf("#") != -1) {
        // Your code in here accessing the string like this
        // location.href.substr(location.href.indexOf("#"))
    }
</script>

Wenn die URI nicht die Position des Dokuments ist das Snippet wird tun, was Sie wollen.

var url = 'example.com/page.html#anchor',
    hash = url.split('#')[1];

if (hash) {
    alert(hash)
} else {
    // do something else
}

Haben Sie versucht das?

if (url.indexOf("#") != -1)
{
}

(Wo url ist die URL, die Sie überprüfen möchten, natürlich.)

$('#myanchor').click(function(){
    window.location.hash = "myanchor"; //set hash
    return false; //disables browser anchor jump behavior
});
$(window).bind('hashchange', function () { //detect hash change
    var hash = window.location.hash.slice(1); //hash to string (= "myanchor")
    //do sth here, hell yeah!
});

Das wird das Problem lösen;)

window.location.hash 

wird die Hash-Kennung zurückgeben

... oder gibt es einen jQuery-Selektor:

$('a[href^="#"]')

Hier ist, was Sie tun können, um für eine Änderung der Hash in regelmäßigen Abständen zu überprüfen und dann eine Funktion aufrufen den Hash-Wert zu verarbeiten.

var hash = false; 
checkHash();

function checkHash(){ 
    if(window.location.hash != hash) { 
        hash = window.location.hash; 
        processHash(hash); 
    } t=setTimeout("checkHash()",400); 
}

function processHash(hash){
    alert(hash);
}

Die meisten Leute sind die URL-Eigenschaften in document.location bewusst. Das ist toll, wenn Sie daran interessiert sind nur in der aktuellen Seite sind. Aber die Frage war über die Möglichkeit, Anker auf einer Seite nicht die Seite selbst zu analysieren.

Was die meisten Menschen zu vermissen scheinen, ist, dass die gleiche URL Eigenschaften sind auch Elemente zu verankern:

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

Rebhuhn und HOPI Kommentare sind vor groß. Sie verdienen eine gesonderte Antwort. Offenbar Hash und Suche Eigenschaften sind auf jedem HTML-Link-Objekt zur Verfügung:

<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 müssen diese auf einer regulären String-Variable und passieren jQuery um sich zu haben, dies sollte funktionieren:

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

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

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

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

diese als Methode hier Werfen zum Abstrahieren Lage Eigenschaften von beliebigen URI-like-Strings. Obwohl window.location instanceof Location wahr ist, wird jeder Versuch, rufen Location wird Ihnen sagen, dass es ein illegales Konstruktor ist. Sie können immer noch um Dinge wie hash bekommen, query, protocol usw. von Ihrem String als href Eigenschaft eines DOM Ankerelement einstellen, die dann alle Adresseigenschaften mit window.location teilen werden.

einfachste Weg, dies zu tun, ist:

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

string.hash;

Der Einfachheit halber, schrieb ich eine kleine Bibliothek, die diese den nativen Location Konstruktor zu ersetzen verwendet, die Saiten nehmen und window.location ähnliche Objekte erzeugen: Location.js

In der Regel geht klickt zunächst als Standort ändert, so nach einem Klick ist eine gute Idee, SetTimeout erhalten aktualisiert window.location.hash

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

oder Sie können mit dem Standort hören:

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

ich eine jQuery-Plugin , das tut so etwas wie was Sie tun möchten.

Es ist ein einfacher Anker-Router.

Hier ist eine einfache Funktion, die true oder false zurückgibt (hat / keinen hashtag hat):

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
}

Returns true in diesem Fall.

Basierend auf @ jon-Skeet Kommentar.

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

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

Sie manchmal die vollständige Abfrage-String bekommen wie "#anchorlink? Vorname = Zeichen"

Das ist mein Skript den Hash-Wert zu erhalten:

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

returns -> #anchorlink
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top