如今 , 当今许多现代Web应用程序都使用哈希URL向页面添加唯一性(例如页面标签,部分,操作等),而无需刷新页面即可识别页面。 这是从使用jQuery获取网址参数通过URL将动态数据传递到页面之后的后续内容。 仍在WWW上广泛使用。
window.location.hash与document.URL
让我们快速浏览一下,下面是一个正则表达式,您可以使用它来获取哈希标签。
//using window.location.hash
$.fn.urlHash = function()
{
return window.location.hash.replace('#','');
};
$.urlHash();
重要:location.hash对于IE (包括IE9) 不安全 。 同样,如果您的网页包含iframe,则在手动刷新内部框架后,iframe内容将获得旧的location.hash值(用于首次加载页面),而手动获取的值则不同于location.hash,因此最好通过document.URL对其进行检索。
//IE Proof - URL Hash Grab - returns complete hash value
$.fn.urlHash = function()
{
return document.URL.substr(document.URL.indexOf('#')+1);
};
$.urlHash();
因此,以提取dayofweek哈希标签值的示例为例,您可以这样做:
//in context - extract dayofweek hash
//eg url#dayofweek1 would return 1
if (document.URL.indexOf('#dayofweek'))
{
week = parseInt(document.URL.substr(document.URL.indexOf('#')+1).replace('dayofweek',''))-1;
$resParent.eq(week).showResources();
}
另一种体面的方式
这是使用较重的正则表达式的另一种不错的方式(井号是可选的,因为.match()永远不会返回null)。
var match = location.hash.match(/^#?(.*)$/)[1];
if (match)
{
//do stuff...
}
失败...
var hash = location.hash.match(/#(w+)/)[1];
问题:当哈希中有任何非拉丁字符或非字母数字字符时,返回错误结果。 例如,对于哈希#foo @ o#bar $%huh你好,将仅返回“ foo”。 location.hash为空时引发TypeError,因为.match()将返回null
var hash = location.hash.split('#')[1];
使用相同的测试哈希,它至少会得到“ foo @ o”部分,这意味着仅当哈希包含井号时它才会失败。 当没有哈希时,它不会引发错误,尽管它返回的是undefined而不是空字符串。