Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过javascript获取查询字符串?_Javascript_Query String - Fatal编程技术网

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

如何通过javascript获取查询字符串?,javascript,query-string,Javascript,Query String,如何在javascript中从URL提取查询字符串 谢谢大家! 如果您指的是地址栏中的URL,则 window.location.search 将只提供查询字符串部分。请注意,这包括开头的问号 如果您引用的是存储在(例如)字符串中的任何随机URL,您可以通过以下操作获取查询字符串,即从第一个问号的索引开始获取子字符串: url.substring(url.indexOf("?")) 假设URL片段部分中的任何问号都已正确编码。如果在末尾有一个目标(即,一个#后跟DOM元素的id),它也会包括

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


谢谢大家!

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

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

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

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

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

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

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"]; 

这是我使用的方法

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 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;
}
函数parseQueryString(){
var assoc={};
var keyValues=location.search.slice(1).split('&');
变量解码=函数{
返回组件(s.replace(/\+/g',);
};
对于(变量i=0;i
适合我-

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;        

    }

 }
函数查询(键){
var url=window.location.href;
KeysValues=url.split(/[\?&]+/);
对于(i=0;i
您可以使用此Javascript

function getParameterByName(name) {
    var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}
或 您还可以使用插件来检索URL的所有部分,包括锚定、主机等

用法非常简单和酷:

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

通过James&Alfa

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

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, " "));
    }
---如何使用---

我用过这个方法

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();
函数getString() { var vars=[],散列; var hashes=window.location.href.slice(window.location.href.indexOf('?')+1).split('&'); for(var i=0;i浏览器中有一个允许您提取和更改查询字符串值的选项

目前,Firefox44+、Chrome49+和Opera36+似乎都支持它

初始化/输入

要开始,请创建一个新的URLSearchParams对象。对于当前的实现,您需要使用querystring上的
slice(1)
删除查询字符串开头的“?”:

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

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

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

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

可以使用
.set
更改参数:

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

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

params.toString(); // myParam=newValue
有一个

Polyfill


由于浏览器支持仍然很薄,所以有一个由Andrea Giammarchi设计的小型polyfill(希望您不介意,我编辑了您的答案。
unescape
已被弃用,应替换为
decodeURIComponent
,您不应解码完整的搜索字符串,因为它将解码参数中编码的符号或相等的符号,例如
?test=fish%26 chips
。此外,我还改进了它,以正确解码
+/cod>e> 进入一个空格。看看我对一个类似问题的回答@Andy No,我一点也不介意!我同意你的看法。它本来可以处理基本的查询字符串,但现在这是一个更完整的答案。它说:
Uncaught SyntaxError:Invalid regular expression://+/:没什么可重复的
,我应该关心吗?@Tom Yes这是一个需要纠正的错误修正(这是@Andy E的错误:P)我已经更新了正确的答案。我注意到如果没有指定参数,函数将失败,所以我编辑了函数(等待同行审查)!通过我的小添加,如果没有参数,它将返回一个空数组,我认为这是预期的结果(而不是一个未捕获的异常)。这很可能是重复的。我想补充一点,这个方法的另一个优点是它似乎可以自动解码值。例如,如果一个值包含一个编码的@符号(%40),这个方法将返回“@”,而不是编码的值“%40”。
params.set('myParam', 'newValue');
params.toString(); // myParam=newValue
// Assuming "?post=1234&action=edit"

var urlParams = new URLSearchParams(window.location.search);

console.log(urlParams.has('post')); // true

console.log(urlParams.get('action')); // "edit"

console.log(urlParams.getAll('action')); // ["edit"]

console.log(urlParams.toString()); // "?post=1234&action=edit"

console.log(urlParams.append('active', '1')); // "?post=1234&action=edit&active=1"