2010-07-19 54 views
2

我需要在对象中获取URL搜索参数,例如: http://example.com/?a=x&b=y&d#pqr应该产生{a:x, b:y, d:1}JavaScript - 改进URL参数获取算法

下面是我用来得到这个的方法,我该如何改进?任何suggessions ...

 var urlParamKeyVals = new Array(); 
     var pieces   = new Array(); 
     var UrlParams = {}; 
     if(window.location.search.length){ 
      var urlSearchString = window.location.search; 
      if(urlSearchString.charAt(0) == '?'){ 
       urlSearchString = urlSearchString.substr(1); 
       urlParamKeyVals = urlSearchString.split("&"); 
      } 
     } 
     for (var i = 0; i<urlParamKeyVals .length; i++) { 
      pieces = urlParamKeyVals [i].split("="); 
      if(pieces.length==1){ 
       UrlParams[pieces[0]]=1; 
      } else { 
       UrlParams[pieces[0]]=pieces[1]; 
      } 
     } 
     UrlParams; 

回答

2

我前段时间为同一目的制作了一个小功能:

编辑:为了处理空键作为1

function getQueryStringValues (str) { 
    str = str || window.location.search; 
    var result = {}; 

    str.replace(/([^?=&]+)(?:[&#]|=([^&#]*))/g, function (match, key, value) { 
    result[key] = value || 1; 
    }); 

    return result; 
} 


getQueryStringValues("http://example.com/?a=x&b=c&d#pqr"); 
// returns { a="x", b="c", d=1 } 
+0

不需要'unescape'? – sje397 2010-07-19 15:16:07

+1

@ sje397:是的,但我会使用'decodeURIComponent'而不是'unescape'。 – CMS 2010-07-19 15:20:47

+1

'getQueryStringValues(“http://example.com/?a&b=y&d#pqr”)'outputs'{b:'y'}',它应该是'{a:1,b:'y':d: 1}' – 2010-07-19 15:24:52

1
function getObjectFromSearch() { 
    var search = location.search; 
    var searchTerms = []; 
    var obj = {}; 
    if (search !== '') { 
    search = search.replace(/^\?/,''); 
    searchTerms = search.split("&"); 
    } 
    for (var i=0, imax=searchTerms.length; i<imax; i++) { 
    var ary = searchTerms[i].split("="); 
    obj[ary[0]] = ary[1]; 
    } 
    return obj; 
} 
2
function getParams(q){ 
    var p, reg = /[?&]([^=#&]+)(?:=([^&#]*))?/g, params = {}; 

    while(p = reg.exec(q)){ 
     params[decodeURIComponent(p[1])] = p[2] ? decodeURIComponent(p[2]) : 1; 
    } 
    return params; 
} 
getParams(location.search); 

- 编辑 我延长了正则表达式也匹配& PARAM(没有值)和& PARAM =(空值)的情况。在这两种情况下,返回值1。它也应该停止提取哈希(#)字符。解码值也受支持。

+0

这一个跳过URL'http://example.com/?d = p&d'的d'参数#pqr1' – 2010-07-19 15:21:41

+0

感谢您的反馈意见。请检查功能的新版本。 – Rafael 2010-07-19 15:34:36

+0

更新getParams('http://example.com?a=x&b=y&d#pqr');'outputs'{a:'x',b:'y',d#pqr:'undefined'} ' – 2010-07-19 15:35:52