使用javascript解析URL#片段

时间:2012-09-20 20:07:37

标签: javascript ajax url jquery hash

我想在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”]

如何从中创建键值对?

3 个答案:

答案 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' });