如何通过javascript获取查询字符串?

时间:2010-05-25 18:41:32

标签: javascript query-string

如何从javascript中的URL中提取查询字符串?

谢谢!

10 个答案:

答案 0 :(得分:49)

您可以轻松构建字典样式集合...

function getQueryStrings() { 
  var assoc  = {};
  var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); };
  var queryString = location.search.substring(1); 
  var keyValues = queryString.split('&'); 

  for(var i in keyValues) { 
    var key = keyValues[i].split('=');
    if (key.length > 1) {
      assoc[decode(key[0])] = decode(key[1]);
    }
  } 

  return assoc; 
} 

并像这样使用它......

var qs = getQueryStrings();
var myParam = qs["myParam"]; 

答案 1 :(得分:31)

如果您在地址栏中引用了网址,那么

window.location.search

将只提供查询字符串部分。请注意,这包括开头的问号。

如果您指的是存储在(例如)字符串中的任何随机URL,您可以通过从第一个问号的索引处开始,通过执行以下操作来获取查询字符串:

url.substring(url.indexOf("?"))

假设URL的片段部分中的任何问号都已正确编码。如果最后有一个目标(即一个#后跟一个DOM元素的id),那么它也会包含它。

答案 2 :(得分:3)

这是我使用的方法......

function Querystring() {
    var q = window.location.search.substr(1), qs = {};
    if (q.length) {
        var keys = q.split("&"), k, kv, key, val, v;
        for (k = keys.length; k--; ) {
            kv = keys[k].split("=");
            key = kv[0];
            val = decodeURIComponent(kv[1]);
            if (qs[key] === undefined) {
                qs[key] = val;
            } else {
                v = qs[key];
                if (v.constructor != Array) {
                    qs[key] = [];
                    qs[key].push(v);
                }
                qs[key].push(val);
            }
        }
    }
    return qs;
}

它返回一个字符串和数组的对象,似乎工作得很好。 (单个键的字符串,具有多个值的相同键的数组。)

答案 3 :(得分:3)

您需要简单地使用以下功能。

function GetQueryStringByParameter(name) {
        name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
        var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
        return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
    }

---如何使用---

var QueryString= GetQueryStringByParameter('QueryString');

答案 4 :(得分:1)

非常简单!

function parseQueryString(){
    var assoc = {};
    var keyValues = location.search.slice(1).split('&');
    var decode = function(s){
        return decodeURIComponent(s.replace(/\+/g, ' '));
    };

    for (var i = 0; i < keyValues.length; ++i) {
        var key = keyValues[i].split('=');
        if (1 < key.length) {
            assoc[decode(key[0])] = decode(key[1]);
        }
    }

    return assoc;
}

答案 5 :(得分:1)

适合我 -

function querySt(Key) {

    var url = window.location.href;

    KeysValues = url.split(/[\?&]+/); 

    for (i = 0; i < KeysValues.length; i++) {

            KeyValue= KeysValues[i].split("=");

            if (KeyValue[0] == Key) {

                return KeyValue[1];

        }

    }

}

function GetQString(Key) {     

    if (querySt(Key)) {

         var value = querySt(Key);

         return value;        

    }

 }

答案 6 :(得分:1)

浏览器中有一个new API called URLSearchParams,允许您提取和更改查询字符串的值。

目前,似乎支持Firefox 44 +,Chrome 49+和Opera 36 +。

<强>初始化/输入

首先,创建一个新的URLSearchParams对象。对于当前的实现,您需要删除“?”在查询字符串的开头,在查询字符串as Jake Archibald suggests上使用slice(1)

var params = new URLSearchParams(window.location.search.slice(1)); // myParam=12

在以后的实现中,您应该能够在没有切片的情况下使用它:

var params = new URLSearchParams(window.location.search); // myParam=12

获取

您可以通过.get方法从中获取参数:

params.get('myParam'); // 12

设置

可以使用.set更改参数:

params.set('myParam', 'newValue');

<强>输出

如果再次需要当前的查询字符串,.toString方法会提供它:

params.toString(); // myParam=newValue

host of other methods in this API

<强>填充工具

由于浏览器支持仍然很薄,因此有一个small polyfill by Andrea Giammarchi (<3kB)

答案 7 :(得分:0)

您可以使用此 Javascript

function getParameterByName(name) {
    var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

或者

您还可以使用插件 jQuery-URL-Parser 允许检索网址的所有部分,包括主播,主机等。

用法很简单,很酷:

$.url().param("itemID")

来自James&amp; Alfa

答案 8 :(得分:0)

我使用过这种方法

function getString()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
    hash = hashes[i].split('=');
    vars.push(hash[0]);
    vars[hash[0]] = hash[1];
}
return vars;
}
var buisnessArea = getString();

答案 9 :(得分:0)

routerLinkActive