2012-09-20 38 views
3

我想將哈希片段解析爲JavaScript中的關聯數組,就像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 =唐老鴨」, 「姓氏= mclotsoquestions」, 「年齡= 25」]

如何從此創建鍵值對?

回答

3

使用jQuery BBQ,這是一種經過實戰檢驗的庫,處理狀態管理。

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

這也使得添加或更改片段容易:

$.bbq.pushState({ someParam: 'value' }); 
+0

bbq不再適用於jQuery(1.9+) - 它看起來好像在幾年內沒有更新過。 – nostromo

+1

@nostromo:這是因爲jQuery 1.9刪除了'$ .browser'。有[解決這個問題的燒烤公關](https://github.com/cowboy/jquery-bbq/pull/41)。 [項目狀態在這裏討論](https://github.com/cowboy/jquery-bbq/issues/49) - 它還沒有死。 – josh3736

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]是兩個元件陣列,其中第一元件是一個關鍵 - 參數名稱,第二是它的相應的值。

編輯:一段時間研究該判例的

後,我覺得我需要重寫本 - 返回一個對象而不是數組的數組。我看到巴拉菲已經做到了,但我不能忍受我的回答是如此違反直覺和bloatin的用法。完整的例子在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

我不知道我理解你的答案。 hash_key_val將只給出hash_array中的最後一個鍵值對。在上面的例子中,它只返回'年齡'和'25'。你如何獲得'名字'的價值? –

+1

'console.log(hash_key_val)'給出['age','25']但沒有其他鍵值對 –

+0

Thanks @DonnyP。我的代碼出錯了。我正在分配整個'hash_key_val'而不是分配給它的元素。這就是爲什麼只有最後一次持續。我糾正了這一點。 [Here](http://jsfiddle.net/MBFuE/)按預期工作。感謝您的關注。 –

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" <-- 
+0

有趣的方法。值得注意的是。 +1 –