如何通过JavaScript检查查询字符串值是否存在?


91

如何q=使用JavaScript或jQuery 检查查询字符串中是否包含?


这可能也有帮助: stackoverflow.com/a/12151322-包含有关URLSearchParams的信息,例如: 如果该查询字符串在您的url中,则var url = new URLSearchParams(location.search); url.has("my_great_query");返回true。然后,您可以通过获取它的价值url.get("my_great_query");
user1063287

Answers:


104
var field = 'q';
var url = window.location.href;
if(url.indexOf('?' + field + '=') != -1)
    return true;
else if(url.indexOf('&' + field + '=') != -1)
    return true;
return false

7
多重返回路径是个人选择,我使用它们是因为我认为它们会导致代码更简洁,因为它们可以帮助我避免嵌套的if语句,并准确显示代码中特定点的情况。对于严格的情况,左手边和右手边都将始终是数字,那么切换到严格相等运算符会有什么区别?
LorenVS

4
清洁代码?...为什么不只返回indexOf测试,而不是将其放在完全没用的初步IF语句中。
詹姆斯

4
我同意JP。您可能已经编写了正确的解决方案,但是您的代码确实草率。大括号在哪里?您应该阅读“ The Good Parts”,其中在某些情况下,代码编写成无花括号的样式的代码已被证明在某些情况下会失败,并在维护期间造成混乱。

2
我认为url.indexOf(field +'=')!= -1就足够了。不管是开始还是结束
yyy

2
@yyy不,不是。如果您有一个查询字符串,例如?kodiaq=1,则在url.indexOf('q=')不带前缀的情况下调用&?会使您认为该q参数存在。
michalstanko '18

113

您还可以使用正则表达式:

/[?&]q=/.test(location.search)

1
实际上,它看起来更像是:if(!new RegExp(“ [?&] hfPageToken =”)。test(s.data))//如果请求中尚不存在hfPageToken数据{s.data = s.data ?[s.data,tokenParam] .join(“&”):tokenParam; }
Dragos Durlut 2012年

9
只是要澄清一下,这很好用if(/[?&]q=/.test(location.search)) { alert("match"); }(由于@DragosDurlut评论,我有点困惑。:)
Leia

1
尤达(Yoda)会对正则表达式说:“它们是更短的代码。更容易阅读,不是。”
RayLoveless


9

简单的javascript代码示例,从字面上回答您的问题:

return location.search.indexOf('q=')>=0;

普通的javascript代码示例,尝试查找q参数是否存在以及是否具有值:

var queryString=location.search;
var params=queryString.substring(1).split('&');
for(var i=0; i<params.length; i++){
    var pair=params[i].split('=');
    if(decodeURIComponent(pair[0])=='q' && pair[1])
        return true;
}
return false;

7
第一个示例将针对fooq=bar
mickadoo

4

还有另一种变体,但与Gumbos解决方案几乎相同:

var isDebug = function(){
    return window.location.href.search("[?&]debug=") != -1;
};

3

此功能可帮助您从JS中的URL获取参数

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

3

试试这个

//field "search";
var pattern = /[?&]search=/;
var URL = location.search;

if(pattern.test(URL))
{
    alert("Found :)");
}else{
    alert("Not found!");
}

JSFiddle:https://jsfiddle.net/codemirror/zj4qyao2/


2

在现代浏览器中,由于有了 URLSearchParams界面的。这定义了许多实用程序方法来使用URL的查询字符串。

假设我们的URL是https://example.com/?product=shirt&color=blue&newuser&size=m,则可以使用window.location.search以下命令获取查询字符串:

const queryString = window.location.search;
console.log(queryString);
// ?product=shirt&color=blue&newuser&size=m

然后,您可以使用解析查询字符串的参数URLSearchParams

const urlParams = new URLSearchParams(queryString);

然后,您可以对结果调用其任何方法。

例如, URLSearchParams.get()将返回与给定搜索参数关联的第一个值:

const product = urlParams.get('product')
console.log(product);
// shirt

const color = urlParams.get('color')
console.log(color);
// blue

const newUser = urlParams.get('newuser')
console.log(newUser);
// empty string

您可以使用 URLSearchParams.has()用来检查某个参数是否存在:

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

console.log(urlParams.has('paymentmethod'));
// false

如需进一步阅读,请单击此处


0

我以前使用过这个库,可以很好地满足您的需求。特别:-

qs.contains(name)
    Returns true if the querystring has a parameter name, else false.

    if (qs2.contains("name1")){ alert(qs2.get("name1"));}

0

这应该有助于:

function getQueryParams(){
    try{
        url = window.location.href;
        query_str = url.substr(url.indexOf('?')+1, url.length-1);
        r_params = query_str.split('&');
        params = {}
        for( i in r_params){
            param = r_params[i].split('=');
            params[ param[0] ] = param[1];
        }
        return params;
    }
    catch(e){
       return {};
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.