How can I check if the query string contains a q= in it using JavaScript or jQuery?
12 Answers
You could also use a regular expression:
/[?&]q=/.test(location.search)
3 Comments
if(/[?&]q=/.test(location.search)) { alert("match"); } (I was a bit confused due to @DragosDurlut comment. :)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 Comments
?kodiaq=1, then calling url.indexOf('q=') without prefixing it with & or ? would lead you to believe that the q parameter is present.Using URL:
url = new URL(window.location.href);
if (url.searchParams.has('test')) {
}
EDIT: if you're sad about compatibility, I'd highly suggest https://github.com/medialize/URI.js/.
EDIT: see comment and Plabon's answer for why using get is problematic to check existence. Much better to use searchParams.has().
2 Comments
In modern browsers, this has become a lot easier, thanks to the URLSearchParams interface. This defines a host of utility methods to work with the query string of a URL.
Assuming that our URL is https://example.com/?product=shirt&color=blue&newuser&size=m, you can grab the query string using window.location.search:
const queryString = window.location.search;
console.log(queryString);
// ?product=shirt&color=blue&newuser&size=m
You can then parse the query string’s parameters using URLSearchParams:
const urlParams = new URLSearchParams(queryString);
Then you can call any of its methods on the result.
For example, URLSearchParams.get() will return the first value associated with the given search parameter:
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
You can use URLSearchParams.has() to check whether a certain parameter exists:
console.log(urlParams.has('product'));
// true
console.log(urlParams.has('paymentmethod'));
// false
For further reading please click here.
Comments
The plain javascript code sample which answers your question literally:
return location.search.indexOf('q=')>=0;
The plain javascript code sample which attempts to find if the q parameter exists and if it has a value:
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;
1 Comment
fooq=barTry this
//field "search";
var pattern = /[?&]search=/;
var URL = location.search;
if(pattern.test(URL))
{
alert("Found :)");
}else{
alert("Not found!");
}
Comments
I've used this library before which does a pretty good job of what you're after. Specifically:-
qs.contains(name)
Returns true if the querystring has a parameter name, else false.
if (qs2.contains("name1")){ alert(qs2.get("name1"));}
Comments
This should help:
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 {};
}
}
Comments
Update on the accepted answer, you should probably just return the if conditions, rather than explicitly returning true/false:
const field = 'q';
const url = window.location.href;
return url.indexOf(`?${field}=`) !== -1 || url.indexOf(`&${field}=`) !== -1;
I interpolated the strings, but you can also just add them together as in the accepted answer.
var url = new URLSearchParams(location.search); url.has("my_great_query");returnstrueif that query string is in your url. You can then get its value withurl.get("my_great_query");.