代码之家  ›  专栏  ›  技术社区  ›  Mithun Sreedharan Kuldeep Modi

javascript-改进URL参数获取算法

  •  2
  • Mithun Sreedharan Kuldeep Modi  · 技术社区  · 16 年前

    我需要在一个对象中获取URL搜索参数,例如; http://example.com/?a=x&b=y&d#pqr 应该屈服 {a:x, b:y, d:1}

    下面是我得到这个的方法,我该如何改进它?任何建议…

            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;
    
    4 回复  |  直到 16 年前
        1
  •  2
  •   Christian C. Salvadó    16 年前

    我前一段时间做了一个同样用途的小函数:

    编辑: 处理 空键 作为 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 }
    
        2
  •  2
  •   Rafael    16 年前
    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。它还应该停止对哈希()字符的提取。也支持解码值。

        3
  •  1
  •   meder omuraliev    16 年前

    如果您试图查看一些非常稳定的代码,jquery bbq有一个很好的deparam方法:

        4
  •  1
  •   Robusto    16 年前
    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;
    }
    
    推荐文章