How to update the URL of a page without causing a reload using vanilla JavaScript

Yesterday, we looked at how to build a vanilla JavaScript search feature for a static website. At the end, I mentioned…
Tomorrow, I’ll show you how I update the URL with the search query, and run a search automatically on page load if there’s a query in the URL.
Well, today is tomorrow, so let’s dig in!
Note: If you haven’t yet, you should probably read yesterday’s post first, or today’s won’t make much sense.


This content originally appeared on Go Make Things and was authored by Go Make Things

Yesterday, we looked at how to build a vanilla JavaScript search feature for a static website. At the end, I mentioned…

Tomorrow, I’ll show you how I update the URL with the search query, and run a search automatically on page load if there’s a query in the URL.

Well, today is tomorrow, so let’s dig in!

Note: If you haven’t yet, you should probably read yesterday’s post first, or today’s won’t make much sense.

Updating the URL

In our search() function, we create an array of regex patterns, get an array of matching items (sorted by how many matches they have), and then render them into the UI.

Let’s create another function, updateURL(), to update the URL for us. We’ll pass in the search query as an argument.

/**
 * Search for matches
 * @param  {String} query The term to search for
 */
function search (query) {

	// ...

	// Display the results
	showResults(results);

	// Update the URL
	updateURL(query);

}

We’re going to use the history.pushState() method to update our URL.

This creates a new entry in the browser’s history (and updates the URL) without causing the page to reload. It accepts three arguments: the browser state, a title to use in the document, and the url.

We’ll use the current history.state, no need to replace anything. We’ll also use the current document.title.

For the url, we’ll combine the location.origin and location.pathname, then append the ?s query string parameter, and use the query for its value. We’ll pass the query into the encodeURI() method to encode it.

/**
 * Update the URL with a query string for the search string
 * @param  {String} query The search query
 */
function updateURL (query) {

	// Create the properties
	let state = history.state;
	let title = document.title;
	let url = window.location.origin + window.location.pathname + '?s=' + encodeURI(query);

}

Finally, we can pass all three into the history.pushState() method to update the URL.

/**
 * Update the URL with a query string for the search string
 * @param  {String} query The search query
 */
function updateURL (query) {

	// Create the properties
	// ...

	// Update the URL
	history.pushState(state, title, url);

}

Running a search on page load

If the URL has an s query string parameter when the page loads, we should also run a search immediately. This lets users bookmark search pages for later.

First, we’ll create an onload() function to run immediately with the script.

// Create a submit handler
form.addEventListener('submit', submitHandler);

// Check for query strings onload
onload();

We’ll use the new URLSearchParams() constructor to create a URLSearchParams object from the location.search property.

Then, we’ll use the URLSearchParams.get() method to look for a query string parameter with a key of s.

If one is not found, we’ll use the return operator to end our function.

/**
 * If there's a query string search term, search it on page load
 */
function onload () {
	let query = new URLSearchParams(window.location.search).get('s');
	if (!query) return;
}

If a query exists, we’ll update the input.value property with it so that the search field contains the search query. Then, we’ll pass the query into the search() function to run a search.

The URLSearchParams.get() method automatically decodes the parameter for us, so we don’t need to worry about that.

/**
 * If there's a query string search term, search it on page load
 */
function onload () {
	let query = new URLSearchParams(window.location.search).get('s');
	if (!query) return;
	input.value = query;
	search(query);
}

Now, when someone reloads or revists a search page, a new search will automatically run.


This content originally appeared on Go Make Things and was authored by Go Make Things


Print Share Comment Cite Upload Translate Updates
APA

Go Make Things | Sciencx (2022-02-18T15:30:00+00:00) How to update the URL of a page without causing a reload using vanilla JavaScript. Retrieved from https://www.scien.cx/2022/02/18/how-to-update-the-url-of-a-page-without-causing-a-reload-using-vanilla-javascript/

MLA
" » How to update the URL of a page without causing a reload using vanilla JavaScript." Go Make Things | Sciencx - Friday February 18, 2022, https://www.scien.cx/2022/02/18/how-to-update-the-url-of-a-page-without-causing-a-reload-using-vanilla-javascript/
HARVARD
Go Make Things | Sciencx Friday February 18, 2022 » How to update the URL of a page without causing a reload using vanilla JavaScript., viewed ,<https://www.scien.cx/2022/02/18/how-to-update-the-url-of-a-page-without-causing-a-reload-using-vanilla-javascript/>
VANCOUVER
Go Make Things | Sciencx - » How to update the URL of a page without causing a reload using vanilla JavaScript. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2022/02/18/how-to-update-the-url-of-a-page-without-causing-a-reload-using-vanilla-javascript/
CHICAGO
" » How to update the URL of a page without causing a reload using vanilla JavaScript." Go Make Things | Sciencx - Accessed . https://www.scien.cx/2022/02/18/how-to-update-the-url-of-a-page-without-causing-a-reload-using-vanilla-javascript/
IEEE
" » How to update the URL of a page without causing a reload using vanilla JavaScript." Go Make Things | Sciencx [Online]. Available: https://www.scien.cx/2022/02/18/how-to-update-the-url-of-a-page-without-causing-a-reload-using-vanilla-javascript/. [Accessed: ]
rf:citation
» How to update the URL of a page without causing a reload using vanilla JavaScript | Go Make Things | Sciencx | https://www.scien.cx/2022/02/18/how-to-update-the-url-of-a-page-without-causing-a-reload-using-vanilla-javascript/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.