2013-02-27 9 views

Odpowiedz

7

window.location.hash powróci "" zarówno bez hash i pustym hash. Jeśli trzeba dokonać rozróżnienia z jakiegoś powodu, można podzielić window.location.href przez #:

var frag = window.location.href.split("#"); 

if (frag.length == 1) { 
    // No hash 
} 
else if (!frag[1].length) { 
    // Empty hash 
} 
else { 
    // Non-empty hash 
} 

lub sprawdzania istniejących hash pierwsze, jak na swój wniosek:

if (window.location.hash) { 
    // Non-empty hash 
} 
else if (window.location.href.split("#").length == 1) { 
    // No hash 
} 
else { 
    // Empty hash 
} 

Patrz także: How to remove the hash from window.location with JavaScript without page refresh?

+0

Czy istnieje sposób, aby napisać tak jak: if (hash nie jest pusty) – bobylapointe

+1

@bobylapointe: Oczywiście, chociaż nie robi to wielkiej różnicy, ponieważ za każdym razem wykonywany jest tylko jeden blok. Zobacz moją edycję. –

1

Nie trzeba jQuery do tego. Jeśli masz pusty hasz, wszystko, co musisz zrobić, to sprawdzić ostatni znak window.location.href. Poniższa powróci true jeśli jest pusty hash:

window.location.href.lastIndexOf('#') === window.location.href.length - 1 
0

Dla tych, którzy są zainteresowani ponownym użyciem wersji rozwiązania Andy'ego E. Zrobiłem prostą funkcję, aby uzyskać aktualny stan mieszania, jako wartość bitową.

/** 
* Checks if the location hash is given, empty or not-empty. 
* 
* @param {String} [href] Url to match against, if not given use the current one 
* @returns {Number} An integer to compare with bitwise-operator & (AND) 
*/ 
function getHashState(href) { 
    var frag = (href || window.location.href).split('#'); 
    return frag.length == 1 ? 1 : !frag[1].length ? 2 : 4; 
} 

można łatwo porównać wartości zwracanych z I-bitowego operatora (&).

if (getHashState() & 1); // no hash 
if (getHashState() & 2); // empty hash 
if (getHashState() & 4); // no empty hash 
Powiązane problemy