使用javascript解析URL#片段

Don*_*n P 3 javascript ajax url hash jquery

我想将散列片段解析为javascript中的关联数组,就像PHP中的$ _GET超全局一样.这是URL:

www.mysite.com/randompage#name=donald&lastname=mclotsoquestions&age=25
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这个:

var hashfragment = location.hash;
var hashfragment_array = hashfragment.split('&');
Run Code Online (Sandbox Code Playgroud)

Hashfragment_array是["#name = donald","lastname = mclotsoquestions","age = 25"]

如何从中创建键值对?

Krz*_*ski 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('=');
}
Run Code Online (Sandbox Code Playgroud)

现在hash_key_val[index]是一个双元素数组,其中第一个元素是键 - 参数名称,第二个元素是相应的值.

编辑:

经过一段时间研究这个案例后,我觉得我需要重写这个 - 返回一个对象而不是数组数组.我看到巴拉菲以前做过这件事,但是我无法忍受我的回答是如此违反直觉和膨胀的用法.小提琴中的完整例子.功能来源:

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;
}
Run Code Online (Sandbox Code Playgroud)