我想在javascript中将哈希片段解析为关联数组,就像PHP中的$ _GET超全局一样。 这是URL:
www.mysite.com/randompage#name=donald&lastname=mclotsoquestions&age=25
到目前为止,我有这个:
var hashfragment = location.hash;
var hashfragment_array = hashfragment.split('&');
Hashfragment_array是[“#name = donald”,“lastname = mclotsoquestions”,“age = 25”]
如何从中创建键值对?
答案 0 :(得分:5)
使用此:
var hash_array = location.hash.substring(1).split('&');
var hash_key_val = new Array(hash_array.length);
for (var i = 0; i < hash_array.length; i++) {
hash_key_val[i] = hash_array[i].split('=');
}
现在hash_key_val[index]
是一个双元素数组,其中第一个元素是键 - 参数名称,第二个元素是它的对应值。
修改强>
经过一段时间研究这个案例后,我觉得我需要重写这个 - 返回一个对象而不是数组数组。我看到巴拉菲以前做过这件事,但是我无法忍受我的回答是如此违反直觉和膨胀的用法。 fiddle中的完整示例。功能来源:
function getParameters(location) {
if (typeof location === 'undefined') {
location = window.location;
}
var hashParams = new (function Params() {})();
if (location.hash.length === 0) {
return hashParams;
};
var hashArray = location.hash.substring(1).split('&');
for (var i in hashArray) {
var keyValPair = hashArray[i].split('=');
hashParams[keyValPair[0]] = keyValPair[1];
}
return hashParams;
}
答案 1 :(得分:4)
var str = www.mysite.com/randompage#name=donald&lastname=mclotsoquestions&age=25
var vars = str.substring(1).split('&');
var key = {};
for (i=0; i<vars.length; i++) {
var tmp = vars[i].split('=');
key[tmp[0]] = tmp[1];
}
// key['name'] = "donald" <--
// key['lastname'] = "mclotsoquestions" <--
// key['age'] = "25" <--
答案 2 :(得分:3)
使用jQuery BBQ,这是一个经过实战检验的图书馆,可以处理状态管理。
$(window).on('hashchange', function(e) { // event fired when the fragment changes
var frag = $.deparam.fragment();
});
它还可以轻松添加或更改片段:
$.bbq.pushState({ someParam: 'value' });