Без перезагрузки можно менять хэш:
function addFilter(filter) {
const delimiter = ',';
// разобрать хэш
const str = location.hash;
const hashes = str.slice(str.indexOf('#') + 1).split('&')
const params = {}
hashes.forEach(hash => {
if (!hash) return;
const [key, val] = hash.split('=')
params[key] = decodeURIComponent(val)
})
// параметр фильтров разобрать, добавить, собрать
const filters = params.search ? params.search.split(delimiter) : [];
filters.push(filter); // ["Toster", "Habr"]
params.search = filters.join(delimiter);
// собрать обратно
hashes.length = 0;
for (p in params)
hashes.push([p, encodeURIComponent(params[p])].join('='));
location.hash = '#' + hashes.join('&');
}
addFilter('Toster');
addFilter('Habr');
//#search=Toster%2CHabr