5

使用 jQuery,有没有办法区分当前的无哈希和空哈希window.location

这就是我所说的“空哈希”:

http://domain.tld/#

这是“无哈希”:

http://domain.tld/
4

3 回答 3

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
}

另请参阅:如何在不刷新页面的情况下使用 JavaScript 从 window.location 中删除哈希?

于 2013-02-27T13:55:21.080 回答
1

为此,您不需要 jQuery。如果您有一个空哈希,那么您需要做的就是检查window.location.href. true如果哈希为空,则返回以下内容:

window.location.href.lastIndexOf('#') === window.location.href.length - 1
于 2013-02-27T13:54:32.377 回答
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;
}

您可以使用按位与运算符 ( &) 轻松比较返回值。

if (getHashState() & 1); // no hash
if (getHashState() & 2); // empty hash
if (getHashState() & 4); // no empty hash
于 2015-03-30T09:56:28.463 回答