关于jquery:如何使用JavaScript检查URL中的#hash?

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

(哪里是你想urlURL检查,显然)。


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字符串属性的类。虽然window.location instanceof Location是TRUE,任何试图Locationinvoke想告诉你它的非法的构造函数。你仍然可以得到这样hashqueryprotocol等设置,由你的字符串,如href物业一锚元素的DOM,那么所有的希望与window.location股地址属性。

这样做的一个方式。

1
2
3
4
var a = document.createElement('a');
a.href = string;

string.hash;

为便利,我写了一个小图书馆utilises本到本地Location构造函数替换字符串和一个带一个新的类对象:location.js window.location


点击第一的位置通常比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);
  }


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

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
}

在本案例true归来。

基于"乔恩飞碟的评论。


有时你得到完整的查询字符串,如"# anchorlink?标记名="

这是我的脚本来获得哈希值。

1
2
3
4
var hashId = window.location.hash;
hashId = hashId.match(/#[^?&\/]*/g);

returns -> #anchorlink