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

IT技术 javascript query-string
2021-02-01 18:09:50

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

谢谢!

6个回答

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

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"]; 
@Andy 不,我一点也不介意!我同意你的看法。它本来可以很好地处理基本查询字符串,但现在这是一个更完整的答案。
2021-03-15 18:09:50
它说:Uncaught SyntaxError: Invalid regular expression: /+/: Nothing to repeat,我应该关心吗?
2021-03-25 18:09:50
我希望你不介意,我编辑了你的答案。 unescape已弃用,应替换为decodeURIComponent,您不应解码完整的搜索字符串,因为它将解码参数中的编码与符号或等号,例如?test=fish%26chips. 此外,我对其进行了改进以正确解码+为空格。在此处查看我对类似问题的回答
2021-04-03 18:09:50
我注意到如果没有指定参数,函数就会失败,所以我编辑了函数(等待同​​行评审)!通过我的小补充,如果没有参数,它将返回一个空数组,我认为这是预期的结果(而不是未捕获的异常)。
2021-04-09 18:09:50
@Tom 是的,这是一个需要修复的错误(这是@Andy E 的错:P)我已将答案更新为正确的。
2021-04-11 18:09:50

如果您指的是地址栏中的 URL,则

window.location.search

只会给你查询字符串部分。请注意,这包括开头的问号。

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

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

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

这是我使用的方法...

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;
}

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

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

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');

很直接!

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;
}