3

PHPの$_GETスーパーグローバルのように、ハッシュフラグメントをJavaScriptの連想配列に解析したいと思います。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"]

これからキーと値のペアを作成するにはどうすればよいですか?

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]は2要素の配列で、最初の要素はキー(パラメーター名)で、2番目の要素は対応する値です。

編集:

このケースをしばらく研究した後、私はこれを書き直す必要があると感じました-配列の配列の代わりにオブジェクトを返します。バラフィは以前にそれをやったことがありますが、直感に反し、肥大化した使用法であるという私の答えには耐えられません。フィドルの完全な例。ここでの関数ソース:

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

状態管理を処理する、バトルテスト済みのライブラリであるjQueryBBQを使用します。

$(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 に答える