Understanding URL Query Strings
URL query strings are a common way to pass data to web applications. They appear after a question mark (?) in a URL, consisting of key-value pairs separated by ampersands (&). For example:
https://www.example.com/page.html?name=John&age=30&city=NewYork
In this URL, name
, age
, and city
are the keys, and John
, 30
, and NewYork
are their corresponding values. JavaScript provides several ways to access these values within a web page.
Basic Access with window.location.search
The window.location.search
property returns the query string portion of the current URL, including the leading question mark. To extract the actual key-value pairs, we typically remove the question mark and split the string by the ampersand.
const queryString = window.location.search; // "?name=John&age=30"
if (queryString) {
const params = queryString.slice(1).split('&'); // ["name=John", "age=30"]
// Now you can iterate through the `params` array and process each key-value pair.
}
Parsing Key-Value Pairs
After splitting the query string, you need to further split each key-value pair by the equals sign (=) to separate the key from the value.
const queryString = window.location.search;
if (queryString) {
const params = queryString.slice(1).split('&');
const queryDict = {};
params.forEach(item => {
const [key, value] = item.split('=');
queryDict[key] = value;
});
// Now `queryDict` is an object where keys are parameter names and values are their corresponding values.
// For example, queryDict['name'] will be 'John'.
}
Handling URL Encoded Characters
URL encoded characters are often used to represent special characters or spaces in a URL. For instance, a space is typically encoded as %20
. To properly decode these characters, use the decodeURIComponent()
function.
const queryString = window.location.search;
if (queryString) {
const params = queryString.slice(1).split('&');
const queryDict = {};
params.forEach(item => {
const [key, value] = item.split('=');
queryDict[key] = decodeURIComponent(value);
});
// Now the values in `queryDict` will be properly decoded.
}
Using URL
and URLSearchParams
(Modern Approach)
The URL
and URLSearchParams
APIs provide a more structured and convenient way to work with URLs and their query strings. These APIs are available in modern browsers and offer several advantages over manual string manipulation.
const url = new URL(window.location.href); // Create a URL object from the current page's URL
const params = new URLSearchParams(url.search); // Create a URLSearchParams object from the query string
// Access parameter values using the `get()` method
const name = params.get('name'); // "John"
const age = params.get('age'); // "30"
// Check if a parameter exists using the `has()` method
const hasCity = params.has('city'); // true
// Iterate over all parameters
for (const [key, value] of params) {
console.log(`${key}: ${value}`);
}
This approach is more robust and easier to maintain, especially when dealing with complex query strings. URLSearchParams
also handles URL encoding and decoding automatically. It is the recommended approach for modern JavaScript development.
Handling Multiple Values for the Same Key
Sometimes, a query string might have multiple values for the same key. For example: ?colors=red&colors=green&colors=blue
. To handle this scenario, you can modify the code to store values in an array.
const url = new URL(window.location.href);
const params = new URLSearchParams(url.search);
const queryDict = {};
for (const [key, value] of params) {
if (queryDict[key]) {
if (!Array.isArray(queryDict[key])) {
queryDict[key] = [queryDict[key]];
}
queryDict[key].push(value);
} else {
queryDict[key] = value;
}
}
This will create an object queryDict
where keys are parameter names and values are either a single value or an array of values.