Добавление и обновление параметров URL в JavaScript и jQuery

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для установки или обновления параметра строки запроса можно использовать URLSearchParams:

JS
Скопировать код
const url = new URL(window.location);
url.searchParams.set('key', 'newValue'); // Устанавливаем новое значение параметра
window.history.pushState({}, '', url);

В случае, когда URLSearchParams не поддерживается браузером, примените функцию с использованием регулярных выражений:

JS
Скопировать код
function updateQuery(uri, key, value) {
  let re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"); // Создаём регулярное выражение для поиска параметра
  if (uri.match(re)) {
    return uri.replace(re, '$1' + key + '=' + value + '$2'); // Обновляем значение параметра
  } else {
    let separator = uri.includes('?') ? '&' : '?'; // Определяем корректный разделитель
    return uri + separator + key + '=' + value; // Добавляем новый параметр
  }
}

window.history.pushState({}, '', updateQuery(window.location.href, 'key', 'newValue'));

Оба метода позволяют изменить URL без перезагрузки страницы!

Кинга Идем в IT: пошаговый план для смены профессии

Проверенные принципы работы с URL

Следуйте этим рекомендациям при работе с URL:

Адаптация под динамические условия

Готовьтесь к обработке динамических данных. URL должны быть гибкими и устойчивыми к обновлению параметров запроса.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Подготовительная проверка

Всегда проверяйте наличие параметров перед внесением в URL каких-либо изменений. Это предотвратит повторения и гарантирует актуальность данных.

Разделители — важная деталь

Правильное применение символов "?" и "&" критически важно для сохранения целостности URL.

Визуализация

Возможно, полезно будет представить строку запроса как навигационную карту:

Markdown
Скопировать код
🔓 Базовый адрес: https://example.com/page?param1=value1&param2=value2

Изменение параметра — это как обновление координат на карте:

Markdown
Скопировать код
🔧 Меняем 'param1' на 'newValue'
plaintext
Скопировать код
🔄 Было: param1=value1
🔒 Стало:  param1=newValue

Вот как выглядит карта после обновления:

Markdown
Скопировать код
Исходная: 🔓🔗[param1=value1, param2=value2]
Обновлённая: 🔓🔗[param1=newValue, param2=value2]

Ваш URL успешно обновлён!

Особые случаи при работе с URL

В процессе работы могут появиться некоторые трудности:

Кодирование специальных символов

Для безопасной передачи специальных символов или пробелов используйте encodeURIComponent:

JS
Скопировать код
url.searchParams.set('key', encodeURIComponent('new Value')); // Кодируем значение для передачи

Поддержка в различных браузерах

Если старые браузеры не поддерживают URLSearchParams, на помощь придёт полифилл.

Работа с массивами и объектами

При работе с массивами и объектами используйте сериализацию для сохранения данных и аккуратно парсите их при чтении.

Удаление параметра

Для удаления параметра воспользуйтесь URLSearchParams.delete:

JS
Скопировать код
url.searchParams.delete('key'); // Удаляем параметр
window.history.pushState({}, '', url);

Управление историей браузера

Бесшумное изменение URL

history.replaceState позволяет изменить URL без записи изменений в истории браузера:

JS
Скопировать код
window.history.replaceState({}, '', url); // Тихо выполняем изменение

Отмена изменений

Если необходимо отменить изменения с возвратом на предыдущий URL, используйте location.assign или location.replace.

Сохранение позиции в URL

При обновлении URL сохраняйте якоря (хеш-теги). Это действительно важно!

Инструменты и ресурсы

Изучайте документацию MDN и пробуйте написанный код на платформах вроде JSFiddle. Полезные библиотеки можно найти на GitHub или npm.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Как можно установить или обновить параметр строки запроса в JavaScript?
1 / 5