2012-09-20 3 views
3

PHP의 $ _GET superglobal과 마찬가지로 해시 조각을 javascript의 연관 배열로 구문 분석하려고합니다.URL을 구문 분석하여 # fragment with javascript

www.mysite.com/randompage#name=donald&lastname=mclotsoquestions&age=25 

지금까지 나는이 있습니다 : 여기 는 URL입니다

var hashfragment = location.hash; 
var hashfragment_array = hashfragment.split('&'); 

Hashfragment_array은 [ "# 이름 = 도널드", "LASTNAME = 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 '를 삭제했기 때문입니다. [문제를 해결하는 BBQ PR] (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]는 첫번째 요소가 핵심 두 소자 어레이 인 - 매개 변수 이름, 두번째는 대응하는 값이다이다.

편집 : 나는이를 다시 작성해야 느꼈다

이 사건을 연구하는 잠시 후 - 배열의 객체가 아닌 배열을 돌려줍니다. 나는 balafi가 전에 그것을 한 것을 본다, 그러나 나는 반 직관적이고 및 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에서 마지막 키 값 쌍만 제공합니다. 위의 예제에서는 'age'와 '25'만 반환합니다. '이름'에 대한 가치는 어떻게 얻을 수 있습니까? –

+1

'console.log (hash_key_val)'은 [ 'age', '25']를 표시하지만 다른 키 값 쌍 중 아무 것도 표시하지 않습니다 –

+0

Thanks @DonnyP. 내 코드에 오류가 있습니다. 나는 그것의 원소에 할당하는 대신 전체'hash_key_val'에 할당하고있었습니다. 그래서 마지막 만 지속됩니다. 나는 그것을 바로 잡았다. [여기] (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 –

관련 문제