我有一些jQuery/JavaScript代码,我想只在URL中有一个散列(#)锚链接时运行。如何使用JavaScript检查这个字符?我需要一个简单的全方位测试,可以检测到如下url:

example.com/page.html #锚 example.com/page.html # anotheranchor

基本上是这样的:

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

当前回答

这是一个简单的方法来测试当前页面的URL:

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

其他回答

  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
  }

你可以使用现代JS解析url:

var my_url = new URL('http://www.google.sk/foo?boo=123#baz');

my_url.hash; // outputs "#baz"
my_url.pathname; // outputs "/moo"
​my_url.protocol; // "http:"
​my_url.search; // outputs "?doo=123"

没有哈希的url将返回空字符串。

你试过这个吗?

if (url.indexOf('#') !== -1) {
    // Url contains a #
}

(url显然是你要检查的url。)

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

我注意到所有这些答案都主要检查window.location.hash,这使得编写测试变得困难。

 const hasHash = string => string.includes('#')

你也可以像这样从url中删除散列:

const removeHash = string => {
 const [url] = string.split('#')
 return url
}

最后你可以把逻辑组合在一起:

if(hasHash(url)) {
 url = removeHash(url)
}