首页 / Javascript / 正文

[javascript]javascript中怎样获取URL中的查询参数字符串值(query string value),有哪些方法呢?

3798 发布于: 2018-08-22 读完约需8分钟

问题描述

在前端开发(javascript)中,是否有一种不使用插件的方法通过jQuery(或者不使用jQuery)来获取URL地址中的查询字符串值呢?
如果有,又有哪些方法可以实现呢?

方案一

可以不用第三方的插件,而使用原生的javascript实现获取URL地址中的查询参数字符串值,方法如下:

function getParameterByName(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, '\\$&');
    var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, ' '));
}

方法调用示例:

// 假如URL地址的参数为: ?foo=lorem&bar=&baz
var foo = getParameterByName('foo'); // "lorem"
var bar = getParameterByName('bar'); // "" (present with empty value)
var baz = getParameterByName('baz'); // "" (present with no value)
var qux = getParameterByName('qux'); // null (absent)

特别说明: 如果一个参数在URL参数字符串中被指定了多次(比如:?foo=lorem&foo=ipsum),那么,上面这个函数会返回第一个匹配的值(lorem)。

方案二

将URL的参数字符串转换成数组,然后通过数组访问每个参数的值,如下:

var urlParams;
(window.onpopstate = function () {
    var match,
        pl     = /\+/g,  // Regex for replacing addition symbol with a space
        search = /([^&=]+)=?([^&]*)/g,
        decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
        query  = window.location.search.substring(1);

    urlParams = {};
    while (match = search.exec(query))
       urlParams[decode(match[1])] = decode(match[2]);
})();

调用示例:

//假如URL地址的参数为: ?i=main&mode=front&sid=de8d49b78a85a322c4155015fdce22c4&enc=+Hello%20&empty

urlParams = {
    enc: " Hello ",
    i: "main",
    mode: "front",
    sid: "de8d49b78a85a322c4155015fdce22c4",
    empty: ""
}

alert(urlParams["mode"]);
// -> "front"

alert("empty" in urlParams);
// -> true

方案三

使用javascriptsplit方法实现,如下:

var qs = (function(a) {
    if (a == "") return {};
    var b = {};
    for (var i = 0; i < a.length; ++i)
    {
        var p=a[i].split('=', 2);
        if (p.length == 1)
            b[p[0]] = "";
        else
            b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
    }
    return b;
})(window.location.search.substr(1).split('&'));

调用示例:

//假如URL地址的参数为: ?topic=123&name=query+string
qs["topic"];    // 123
qs["name"];     // query string
qs["nothere"];  // undefined (object)

方案四

现代浏览器(Firefox 44+, Opera 36+, Edge 17+, Safari 10.3+, Chrome 49+)版本支持的情况下,可以使用URLSearchParams实现,如下:

let params = new URLSearchParams(location.search);

或者

let params = (new URL(location)).searchParams;

或者任意的URL地址:

let url = new URL('https://example.com?foo=1&bar=2');
let params = new URLSearchParams(url.search);

当然,还可以使用URL对象的.searchParams属性来访问参数,如下:

let params = new URL('https://example.com?foo=1&bar=2').searchParams;
params.get('foo'); // "1"
params.get('bar'); // "2"

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [LINQ].NET/C#应用程序编程开发中如何使用LINQ快速检查一个字符串中是否包含至少一个数字?

下一篇: [ASP.NET Core]在ASP.NET Core跨平台应用程序开发中如何访问http请求的的上下文(HttpContext)?

本文永久链接码友网 » [javascript]javascript中怎样获取URL中的查询参数字符串值(query string value),有哪些方法呢?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册