你怎么能检查使用JavaScript的URL中的#hash?

我有一些jQuery JavaScript代码,只有当URL中存在散列(#)锚链接时,才能运行。 你如何使用JavaScript检查这个字符? 我需要一个简单的全面testing来检测这样的URL:

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

基本上是这样的:

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

如果任何人都可以指出我的方向,那将是非常感激。

简单:

 if(window.location.hash) { // Fragment exists } else { // Fragment doesn't exist } 
  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 } 

把以下内容:

 <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> 

如果URI不是文档的位置,这个片段将会做你想要的。

 var url = 'example.com/page.html#anchor', hash = url.split('#')[1]; if (hash) { alert(hash) } else { // do something else } 

你尝试过吗?

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

(显然,URL是你想要检查的URL。)

 $('#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! }); 

这将解决问题;)

 window.location.hash 

将返回哈希标识符

…或者有一个jQueryselect器:

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

以下是您可以定期检查哈希值的变化,然后调用函数来处理哈希值。

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

大多数人都知道document.location中的URL属性。 如果您只对当前页面感兴趣,那很好。 但问题是能够parsing页面上的锚点而不是页面本身。

大多数人似乎错过的是那些相同的URL属性也可用于锚点元素:

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

Part and和Gareths上面的评论都很棒。 他们应该得到一个单独的答案。 显然,哈希和search属性是可用的任何HTML链接对象:

 <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> 

要么

 <a href="bar.html?foo" onclick="alert(this.search)">SAY FOO</a> 

如果你需要一个常规的stringvariables,恰好有jQuery,这应该工作:

 var mylink = "foo.html?bar#quz"; if ($('<a href="'+mylink+'">').get(0).search=='bar')) { // do stuff } 

(但它可能有点过头..)

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

在这里把它作为从任意类似URI的string抽象位置属性的方法。 尽pipewindow.location instanceof Location是true,但任何调用Location都会告诉你这是一个非法的构造函数。 您仍然可以通过将string设置为DOM锚点元素的href属性,然后将其与window.location共享所有地址属性,从而获得hashqueryprotocol等内容。

最简单的方法是:

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

为了方便起见,我编写了一个小库,利用这个库来replace原生Location构造函数,该构造函数使用string并生成window.location的对象: Location.js

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

通常点击首先比位置变化,所以点击后是一个好主意setTimeOut获取更新window.location.hash

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

或者你可以听取位置:

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

我写了一个jQuery插件 ,做你想做的事情。

这是一个简单的锚点路由器。

这是一个简单的函数,返回truefalse (有/没有hashtag):

 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 } 

在这种情况下返回true

基于@ jon-skeet的评论。

有时你会得到完整的查询string,如“#anchorlink?firstname = mark”

这是我的脚本来获取散列值:

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