你怎么能检查使用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
共享所有地址属性,从而获得hash
, query
, protocol
等内容。
最简单的方法是:
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插件 ,做你想做的事情。
这是一个简单的锚点路由器。
这是一个简单的函数,返回true
或false
(有/没有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