Javascript 如何在JS中获取URL中的#散列值
例如,我的URL为: 我希望js代码只返回Javascript 如何在JS中获取URL中的#散列值,javascript,url,Javascript,Url,例如,我的URL为: 我希望js代码只返回value2x。 我尝试了location.hash.split('=')[1],但结果是第一个哈希值,就像url是 它返回fdg&hash。 我只需要散列的值 请不要用jQuery 提前谢谢你的帮助。怎么样 location.hash.split('hash=')[1].split('&')[0] 这将在hash=处拆分散列,并在hash=之后和任何其他参数之前获取值。在&上拆分,然后在=上拆分: function getHashValu
value2x
。
我尝试了location.hash.split('=')[1]
,但结果是第一个哈希值,就像url是
它返回fdg&hash
。
我只需要散列的值
请不要用jQuery
提前谢谢你的帮助。怎么样
location.hash.split('hash=')[1].split('&')[0]
这将在hash=
处拆分散列,并在hash=之后和任何其他参数之前获取值。在&
上拆分,然后在=
上拆分:
function getHashValue(key) {
var matches = location.hash.match(new RegExp(key+'=([^&]*)'));
return matches ? matches[1] : null;
}
// usage
var hash = getHashValue('hash');
pairs = location.hash.substr(1).split('&').map(function(pair) {
var kv = pair.split('=', 2);
return [decodeURIComponent(kv[0]), kv.length === 2 ? decodeURIComponent(kv[1]) : null];
})
这里的pairs
将是一个数组数组,其键位于0
,值位于1
:
[["hfh","fdg"],["hash","value2x"]]
如果你正在做大量的url操作,那么你应该检查一下
访问url哈希中的参数
$.url('http://www.google.com/#hfh=fdg&hash=value2x').fparam('hash');
或者如果它的当前url
$.url().fparam('hash');
希望对您有所帮助location.parseHash=function(){
location.parseHash = function(){
var hash = (this.hash ||'').replace(/^#/,'').split('&'),
parsed = {};
for(var i =0,el;i<hash.length; i++ ){
el=hash[i].split('=')
parsed[el[0]] = el[1];
}
return parsed;
};
var obj= location.parseHash();
obj.hash; //fdg
obj.hfh; //value2x
var hash=(this.hash | | |').replace(/^#/,'').split('&'),
解析={};
对于(var i=0,el;i),可以为此重用URLSearchParams类
var urlParams = new URLSearchParams(window.location.hash.replace("#","?"));
var hash = urlParams.get('hash');
这将在hash=
之后产生所有结果。应该注意的是,如果没有hash或密钥不存在,这将导致错误。@xdazz:正如Hectron所说,如果没有hash,则会引发TypeError,因此您应该检查match
方法返回的数组的长度,并且只有当该数组的长度为greate时才对其进行索引r大于或等于2。如果不是,则应返回空字符串或null(或未定义)。还应注意“key”将由正则表达式解析器解释,因此如果合法密钥包含一个点或一个大括号,则会导致结果与预期不同,甚至出现错误。应更正如下:返回匹配项和匹配项。长度===2?匹配项[1]:null;此原样不起作用,使其location.href.split('hash=')[1]。拆分('&')[0]
worksNeed to test more,Upvoting now这很有帮助,我以前也知道了,很抱歉我之前没有指定,但我不想使用jQuery。或者你也可以使用window.location.hash.slice(1)
来代替。该代码不正确。与其将“#”替换为“?”,不如将“#”替换为“#”。因此,用slice替换(“#“,“?”)(1) @Clox不,这只会将散列部分中的第一个键与参数部分中的最后一个值合并,或者将其与路径合并。要么#需要替换为?(如果没有url参数)要么替换为&(如果已经有参数)。但无论如何,这是一种不好的方法,因为您也会提取url参数。