如何从URL获取片段标识符(哈希号后的值)?


211

例:

www.site.com/index.php#hello

使用jQuery,我想将值hello放在变量中:

var type = 

我不确定这个问题是否应该保留为jQuery并询问。大多数答案适用于没有jQuery的JS,这似乎是一个不错的目标。
user4642212

Answers:


585

不需要jQuery

var type = window.location.hash.substr(1);

154
jQuery不够!(开玩笑:+1。)
nnnnnn 2012年

2
我刚刚了解到#可以用作“哈希”,在JavaScript中用作标识符/关键字。很棒
Clain Dsilva 2015年

13
您也可以使用,.slice(1)而不是使用.substr(1)它来提供适度的性能提升,尽管这对现实生活没有影响。
devius

3
OMG,您需要检查URL哈希多少次才能产生明显的变化?一百万?在这种情况下,“适度增长”是一个巨大的夸大其词。:-)
konrad

37

您可以使用以下代码来做到这一点:

var url = "www.site.com/index.php#hello";
var hash = url.substring(url.indexOf('#')+1);
alert(hash);

查看演示


4
注意:IE8不支持indexOf
Sebastiaan Ordelman 2015年

4
幸运的是,@ SchalkKeun现在在18岁时几乎消失了。但是对于那些仍然需要处理该传奇的人,应该意识到这一点。
Sebastiaan Ordelman

6
老实说,IE8是如此不安全,所有付款网关基本上都将在下周(2018年6月30日)删除所有不支持TLS 1.2的浏览器,您将完全无法使用它们进行付款。这样一来,所有这些笨拙的旧浏览器对任何电子商务客户端都将无用。
沙尔克·基恩

13
var url ='www.site.com/index.php#hello';
var type = url.split('#');
var hash = '';
if(type.length > 1)
  hash = type[1];
alert(hash);

jsfiddle上的工作演示


if语句可以缩短为var hash = type[1] || "";
user4642212


6

我有运行时的URL,下面给出了正确的答案:

let url = "www.site.com/index.php#hello";
alert(url.split('#')[1]);

希望这可以帮助


6

很简单 试试下面的代码

$(document).ready(function(){
  var hashValue = location.hash.replace(/^#/, '');  
  //do something with the value here  
});

3
var hashValue = location.hash.replace(/ ^#/,``);
flakerimi 2015年

3

根据AK的代码,这是一个辅助函数。JS小提琴这里(http://jsfiddle.net/M5vsL/1/)...

// Helper Method Defined Here.
(function (helper, $) {
    // This is now a utility function to "Get the Document Hash"
    helper.getDocumentHash = function (urlString) {
        var hashValue = "";

        if (urlString.indexOf('#') != -1) {
            hashValue = urlString.substring(parseInt(urlString.indexOf('#')) + 1);
        }
        return hashValue;
    };
})(this.helper = this.helper || {}, jQuery);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.