Вот полная функция для добавления и удаления параметров на основе этого вопроса и этого github gist:
https://gist.github.com/excalq/2961415
var updateQueryStringParam = function (key, value) {
var baseUrl = [location.protocol, '//', location.host, location.pathname].join(''),
urlQueryString = document.location.search,
newParam = key + '=' + value,
params = '?' + newParam;
// If the "search" string exists, then build params from it
if (urlQueryString) {
updateRegex = new RegExp('([\?&])' + key + '[^&]*');
removeRegex = new RegExp('([\?&])' + key + '=[^&;]+[&;]?');
if( typeof value == 'undefined' || value == null || value == '' ) { // Remove param if value is empty
params = urlQueryString.replace(removeRegex, "$1");
params = params.replace( /[&;]$/, "" );
} else if (urlQueryString.match(updateRegex) !== null) { // If param exists already, update it
params = urlQueryString.replace(updateRegex, "$1" + newParam);
} else { // Otherwise, add it to end of query string
params = urlQueryString + '&' + newParam;
}
}
window.history.replaceState({}, "", baseUrl + params);
};
Вы можете добавить такие параметры:
updateQueryStringParam( 'myparam', 'true' );
И снимаем вот так:
updateQueryStringParam( 'myparam', null );
В этом потоке многие говорили, что регулярное выражение, вероятно, не лучшее / стабильное решение ... так что я не уверен на 100%, есть ли у этой вещи какие-то недостатки, но насколько я ее тестировал, она работает довольно хорошо.