3

我想将哈希片段解析为 javascript 中的关联数组,就像 PHP 中的 $_GET 超全局一样。这是网址:

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"]

如何从中创建键值对?

4

3 回答 3

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]是一个双元素数组,其中第一个元素是键 - 参数名称,第二个是它的对应值。

编辑:

在研究了这个案例一段时间后,我觉得我需要重写它——返回一个对象而不是数组数组。我看到balafi以前做过,但我不能忍受我的回答是如此违反直觉和臃肿的用法。小提琴中的完整示例。函数源在这里:

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;
}
于 2012-09-20T20:11:20.890 回答
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"  <--
于 2012-09-20T20:24:01.490 回答
3

使用jQuery BBQ,这是一个久经考验的处理状态管理的库。

$(window).on('hashchange', function(e) { // event fired when the fragment changes
    var frag = $.deparam.fragment();
});

它还使添加或更改片段变得容易:

$.bbq.pushState({ someParam: 'value' });
于 2012-09-20T20:12:19.587 回答