如何在JavaScript中获取查询字符串

337 阅读4分钟

在这篇快速文章中,我们将讨论几种不同的方法,你可以用它们来获取JavaScript中的查询字符串。

当你用JavaScript工作时,有时你需要在你的脚本中访问查询字符串参数。没有直接的方法来实现这一点,因为没有内置的JavaScript函数或方法允许你实现它。当然,你可以找到很多第三方的实用脚本来满足你的要求,但如果你能用虚构的JavaScript来实现它,那就最好不过了。

在这篇文章中,我们将讨论如何在vanilla JavaScript中建立一个自定义函数来获取查询字符串参数。稍后,我们还将探讨URLSearchParams 接口,以了解它是如何工作的,以及它对查询字符串参数有什么帮助。

如何在vanilla JavaScript中获取查询字符串

在本节中,我们将看到如何用vanilla JavaScript获得查询字符串值。

让我们来看看下面这个JavaScript例子。

function getQueryStringValues(key) {
    var arrParamValues = [];
    var url = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

    for (var i = 0; i < url.length; i++) {
        var arrParamInfo = url[i].split('=');

        if (arrParamInfo[0] == key || arrParamInfo[0] == key+'[]') {
            arrParamValues.push(decodeURIComponent(urlparam[1]));
        }
    }

    return (arrParamValues.length > 0 ? (arrParamValues.length == 1 ? arrParamValues[0] : arrParamValues) : null);
}

// index.php?keyword=FooBar&hobbies[]=sports&hobbies[]=Reading
console.log(getQueryStringValues('keyword')); // "FooBar"
console.log(getQueryStringValues('hobbies')); // Array [ "sports", "Reading" ]
console.log(getQueryStringValues('keyNotExits')); // null

我们做了getQueryStringValues 函数,你可以用它来获取URL中可用的查询字符串参数的值。

让我们通过这个函数来看看它是如何工作的。

下面的片段是该函数中最重要的片段之一。

var url = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

首先,我们使用了indexOf 方法来查找URL中? 字符的位置。接下来,我们使用slice 方法来提取URL中的查询字符串部分。最后,我们使用split 方法,通过& 字符来分割查询字符串。因此,url 变量被初始化为一个查询字符串参数的数组。

接下来,我们循环浏览url 数组中的所有元素。在循环过程中,我们使用split 方法,通过= 字符来分割数组的值。这样一来,arrParamInfo 变量就被初始化为一个数组,其中数组的键是参数名称,数组的值是参数值。你可以在下面的片段中看到这一点。

var arrParamInfo = url[i].split('=');

接下来,我们将其与函数中传递的参数进行比较。如果它与传入的参数相匹配,我们将把参数值推入arrParamValues 数组。正如你所看到的,我们也已经涵盖了单参数和数组参数。

if (arrParamInfo[0] == key || arrParamInfo[0] == key+'[]') {
    arrParamValues.push(decodeURIComponent(urlparam[1]));
}

最后,如果arrParamValues 变量包含值,我们将返回它,否则就返回null

return (arrParamValues.length > 0 ? (arrParamValues.length == 1 ? arrParamValues[0] : arrParamValues) : null);

你可以继续用不同的值来测试getQueryStringValues 函数。

如上面的例子所示,我们已经用不同的值调用了它,并用console.log 函数记录了输出。值得注意的是,如果你在getQueryStringValues 函数中传递的参数在查询字符串中以数组形式存在,你将得到一个数组的响应,它将返回该参数的所有值。

URLSearchParams 的方式

这是一种最简单的方法,你可以用它来获取JavaScript中的查询字符串值。URLSearchParams 接口提供了实用的方法来处理一个URL的查询字符串。你可以用Can I use来检查浏览器的支持。

让我们快速看看它是如何工作的。

// index.php?keyword=Search Text&click=Submit
var urlParams = new URLSearchParams(window.location.search);

一旦你用查询字符串初始化了URLSearchParams 对象,你就可以使用URLSearchParams 对象所提供的实用方法。

让我们在本文的上下文中浏览一下几个有用的方法。

get 方法

顾名思义,get 方法是用来获取查询字符串参数的值。

让我们通过下面的例子来理解它。

// index.php?keyword=Search Text&click=Submit
var objUrlParams = new URLSearchParams(window.location.search);
console.log(objUrlParams.get('keyword')); // “Search Text”

在上面的例子中,我们已经获取了keyword 查询字符串参数的值,它将输出Search Text

这样,你可以使用get 方法来获取任何查询字符串参数的值。

has 方法

has 方法是用来检查查询字符串中是否存在参数。

// index.php?keyword=Search Text&click=Submit
var objUrlParams = new URLSearchParams(window.location.search);
console.log(objUrlParams.has('order')); // “false”
console.log(objUrlParams.has('click')); // “true”

在上面的例子中,我们使用了has 方法来检查不同参数的存在。

getAll 方法

如果一个参数多次存在,getAll 方法用于获取该参数的所有值。

让我们通过下面的例子来检查一下。

// index.php?keyword=Search Text&click=Submit&filter=value1&filter=value2
var objUrlParams = new URLSearchParams(window.location.search);
console.log(objUrlParams.getAll('filter')); // [“value1”,”valu2”]

正如你所看到的,当我们使用getAll 方法时,它会返回所有与该参数相关的值。

总结

今天,我们讨论了在JavaScript中获取查询字符串的不同方法。除了普通的 JavaScript,我们还讨论了如何使用URLSearchParams接口来获取查询字符串的变量。