#javascript #url
#javascript #url
Вопрос:
У меня есть страница с бесконечной прокруткой с помощью ajax. При получении следующего набора данных мне нужно изменить путь в URL-адресе без перезагрузки страницы через javascript.
Учитывая URL-адрес https://example.com/products/page/2 .
Мне нужно изменить этот URL на https://example.com/products/page/3 когда следующий набор объектов выбирается при прокрутке.
Я знаю, что параметры поиска могут быть изменены таким образом с помощью этого кода
var url = new URL(location.href);
url.searchParams.set('page', '2');
url.search = url.searchParams.toString();
var new_url = url.toString();
window.history.pushState('page2', 'Title', new_url);
Я хотел знать, как сделать то же самое с именем пути, а не с параметрами поиска. Как это можно сделать?
Ответ №1:
Вы можете получить доступ pathname
к URL-адресу и использовать манипуляции со строками для изменения конечной точки.
const url = new URL("https://example.com/products/page/3");
console.log(url.pathname);
// '/products/page/3'
Свойство pathname интерфейса URL-адреса представляет собой USVString, содержащую начальный ‘/’, за которым следует путь к URL-адресу (или пустая строка, если пути нет).
const loc = "https://example.com/products/page/3";
const url = new URL(loc);
const pathnameArray = url.pathname.split('/');
pathnameArray[pathnameArray.length - 1] = parseInt(pathnameArray[pathnameArray.length - 1]) 1;
url.pathname = pathnameArray.join('/');
console.log(url);
Комментарии:
1. Установка пути url таким образом url.pathname = xyz; не обновляет URL. Мне просто нужно, как задать путь и отразить его в браузере без перезагрузки страницы.
2. Он изменяет URL-адрес, на который ссылается
url
, если вы хотите, чтобы изменения отражались в браузере, вам необходимо обновить местоположение с помощьюlocation.replace(url)
илиlocation.assign(url)
3. Когда я использую location.replace(url) или location.assign(url), страница обновляется. Я этого не хочу. Я хочу, чтобы он работал как url.searchParams.set(‘страница’, ‘2’);
4. Как указано в фрагменте
url.pathname = '/updated/pathname'
, изменяет.pathname
значение дляURL
ссылки на объектurl
так же, какurl.searchParams.set()
изменяет.search
значение для этого объекта. Конечно, замена или назначение местоположения новым URL-адресом приведет к перезагрузке страницы (это было бы так, если бы вы заменили его URL-адресом, измененным.searchParams.set
также.)5. Нет. Изменение параметров поиска с помощью метода .set не перезагружает страницу. Я предполагаю, что невозможно изменить путь без перезагрузки страницы