How can you check for a #hash in a URL using JavaScript?
我有一些jquery javascript代码,我只想在URL中有哈希()锚链接时运行。如何使用javascript检查此字符?我需要一个简单的"全部捕获"测试来检测这样的URL:
- 示例.com/page.html锚定
- 示例.com/page.html另一个锚
基本上是这样的:
1 2 3 4 5 | if (thereIsAHashInTheUrl) { do this; } else { do this; } |
如果有人能给我指明正确的方向,我会非常感激的。
简单:
1 2 3 4 5 | if(window.location.hash) { // Fragment exists } else { // Fragment doesn't exist } |
1 2 3 4 5 6 7 | 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 } |
把下面的:
1 2 3 4 5 | <script type="text/javascript"> if (location.href.indexOf("#") != -1) { // Your code in here accessing the string like this // location.href.substr(location.href.indexOf("#")) } |
如果URI是一个文档的位置不在这段想做你想要的。
1 2 3 4 5 6 7 8 | var url = 'example.com/page.html#anchor', hash = url.split('#')[1]; if (hash) { alert(hash) } else { // do something else } |
你有没有试过这个吗?
1 2 3 | if (url.indexOf("#") != -1) { } |
(哪里是你想
1 2 3 4 5 6 7 8 | $('#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! }); |
要解决这一问题;)
1 | window.location.hash |
将返回的哈希标识符
或有一个jQuery选择器:
1 | $('a[href^="#"]') |
这里是你可以做一个定期的更改检查的哈希函数,然后调用一个过程的哈希值。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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属性。这是伟大的,如果你有兴趣只在当前页。但问题是什么是可以在一个anchors解析页面的页面本身。
大多数人似乎是相同的那些小姐是URL和锚元素的一个属性是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // 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 } }); |
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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; } } |
1 | var requestedHash = ((window.location.hash.substring(1).split("#",1))+"?").split("?",1); |
以上是大鹧鸪和加雷斯的评论。他们值得拥有一个单独的答案。显然,哈希和搜索性能是可用的任何HTML链接对象:
1 2 3 4 | test <script type="text/javascript"> alert(document.getElementById('test').search); //bar alert(document.getElementById('test').hash); //quz |
或
1 | SAY FOO |
如果你需要这个on a正则字符串变量,口周围有jQuery,这应该工作。
1 2 3 4 5 | var mylink ="foo.html?bar#quz"; if ($('').get(0).search=='bar')) { // do stuff } |
但它可能是一位了。)
这改变了在这里作为一个任意位置的方法,提取的URI字符串属性的类。虽然
这样做的一个方式。
1 2 3 4 | var a = document.createElement('a'); a.href = string; string.hash; |
为便利,我写了一个小图书馆utilises本到本地
点击第一的位置通常比CRP的变化,因此,点击是一个好主意setTimeoutwindow.location.hash得到更新
1 2 3 4 5 | $(".nav").click(function(){ setTimeout(function(){ updatedHash = location.hash },100); }); |
或你可以在列表的位置。
1 2 3 | window.onhashchange = function(evt){ updatedHash ="#" + evt.newURL.split("#")[1] }; |
我写的是什么样的jQuery插件,a你想要做的。
这是一个简单的锚路由器。
这是一个简单的方法来测试本研究当前页面URL:
1 2 3 | function checkHash(){ return (location.hash ? true : false); } |
这里是一个简单的函数,返回
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 } |
在本案例
基于"乔恩飞碟的评论。
有时你得到完整的查询字符串,如"# anchorlink?标记名="
这是我的脚本来获得哈希值。
1 2 3 4 | var hashId = window.location.hash; hashId = hashId.match(/#[^?&\/]*/g); returns -> #anchorlink |