使用jQuery,有没有办法区分当前window.location
上没有哈希和空哈希?
这就是我所谓的“空哈希”:
http://domain.tld/#
这是“没有哈希”:
http://domain.tld/
答案 0 :(得分:7)
window.location.hash
将返回""
。如果您出于某种原因需要进行区分,可以将window.location.href
分割为#
:
var frag = window.location.href.split("#");
if (frag.length == 1) {
// No hash
}
else if (!frag[1].length) {
// Empty hash
}
else {
// Non-empty hash
}
或者根据您的要求首先检查现有哈希:
if (window.location.hash) {
// Non-empty hash
}
else if (window.location.href.split("#").length == 1) {
// No hash
}
else {
// Empty hash
}
另请参阅:How to remove the hash from window.location with JavaScript without page refresh?
答案 1 :(得分:1)
你不需要jQuery。如果您有一个空哈希,那么您需要做的就是检查window.location.href
的最后一个字符。如果存在空哈希,则以下内容将返回true
:
window.location.href.lastIndexOf('#') === window.location.href.length - 1
答案 2 :(得分:0)
对于那些对可重复使用的Andy E解决方案感兴趣的人。我创建了一个简单的函数来获取实际的哈希状态,作为按位值。
/**
* 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;
}
您可以使用按位AND运算符(&
)轻松比较返回值。
if (getHashState() & 1); // no hash
if (getHashState() & 2); // empty hash
if (getHashState() & 4); // no empty hash