考虑:

http://example.com/page.html?returnurl=%2Fadmin

对于page.html内的js,它如何检索GET参数?

对于上面的简单例子,func('returnurl')应该是/admin。

但它也应该适用于复杂的查询字符串…


当前回答

这个函数使用正则表达式,如果参数不存在或没有任何值,则返回null:

function getQuery(q) {
   return (window.location.search.match(new RegExp('[?&]' + q + '=([^&]+)')) || [, null])[1];
}

其他回答

我这样做(检索一个特定的get-parameter,这里'parameterName'):

var parameterValue = decodeURIComponent(window.location.search.match(/(\?|&)parameterName\=([^&]*)/)[2]);

你应该使用URL和URLSearchParams本地函数:

let url = new url ("https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8&q=mdn%20query%20string") let params = new URLSearchParams(url.search); Let sourceid = params.get('sourceid') // 'chrome-instant' Let q = params.get('q') // 'mdn查询字符串' 让ie = params.has('ie') // true params.append(“平”、“乒乓球”) console.log (sourceid) console.log (q) console.log (ie) console.log (params.toString ()) console.log (params.get(“平”))

https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams https://polyfill.io/v2/docs/features/

如果您不介意使用库而不是自己的实现,请查看https://github.com/jgallen23/querystring。

一种更花哨的方法::)

var options = window.location.search.slice(1)
                      .split('&')
                      .reduce(function _reduce (/*Object*/ a, /*String*/ b) {
                        b = b.split('=');
                        a[b[0]] = decodeURIComponent(b[1]);
                        return a;
                      }, {});

Window.location.search将返回?上。下面的代码将删除?,使用split将键/值数组分开,然后将命名属性分配给params对象:

function getSearchParameters() {
    var prmstr = window.location.search.substr(1);
    return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
}

function transformToAssocArray( prmstr ) {
    var params = {};
    var prmarr = prmstr.split("&");
    for ( var i = 0; i < prmarr.length; i++) {
        var tmparr = prmarr[i].split("=");
        params[tmparr[0]] = tmparr[1];
    }
    return params;
}

var params = getSearchParameters();

然后,您可以通过调用params.test从http://myurl.com/?test=1获取测试参数。