Есть ли лучший способ удалить параметр из строки запроса в строке URL в стандартном JavaScript, кроме использования регулярного выражения?
Вот то, что я придумал до сих пор, что, кажется, работает в моих тестах, но я не люблю изобретать заново разбор строки запроса!
function RemoveParameterFromUrl( url, parameter ) {
if( typeof parameter == "undefined" || parameter == null || parameter == "" ) throw new Error( "parameter is required" );
url = url.replace( new RegExp( "\\b" + parameter + "=[^&;]+[&;]?", "gi" ), "" ); "$1" );
// remove any leftover crud
url = url.replace( /[&;]$/, "" );
return url;
}
javascript
query-string
Мэтью Лок
источник
источник
url= urlparts[0]+'?'+pars.join('&');
наurl= urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : "");
Современные браузеры предоставляют
URLSearchParams
интерфейс для работы с параметрами поиска. У которого естьdelete
метод, который удаляет параметр по имени.источник
URLSearchParams
не поддерживается IE, Edge 16 и iOS 10.2 Safari. (ref: caniuse.com/#feat=urlsearchparams )Скопировано из ответа bobince, но он поддерживает вопросительные знаки в строке запроса, например
http://www.google.com/search?q=test???+something&aq=f
Допустимо ли иметь в URL более одного вопросительного знака?
источник
???
это недопустимый синтаксис и никогда не должен встречаться в URL`.return url.endsWith("?") ? url.slice(0,-1) : url;
чтобы охватить случай, когда параметр, который нужно удалить, является единственным в строке запросаЯ не вижу серьезных проблем с решением регулярных выражений. Но не забудьте сохранить идентификатор фрагмента (текст после
#
).Вот мое решение:
И что касается bobince, да - вам нужно будет экранировать
.
символы в именах параметров.источник
url.replace(new RegExp('^([^#]*\?)(([^#]*)&)?' + parameter + '(\=[^&#]*)?(&|#|$)' ), '$1$3$5').replace(/^([^#]*)((\?)&|\?(#|$))/,'$1$3$4')
Вы можете изменить URL-адрес с помощью:
таким образом вы можете перезаписать URL без параметра поиска, я использую его для очистки URL после получения параметров GET.
источник
Всем, кто интересуется решением с регулярными выражениями, я собрал эту функцию для добавления / удаления / обновления параметра строки запроса. Если не указать значение, параметр будет удален, а при вводе - добавлен / обновлен параметр. Если URL не указан, он будет взят из window.location. Это решение также учитывает привязку URL-адреса.
ОБНОВИТЬ
Произошла ошибка при удалении первого параметра в строке запроса, я переработал регулярное выражение и тест, чтобы включить исправление.
ОБНОВЛЕНИЕ 2
Обновление @schellmax для исправления ситуации, когда символ хэштега теряется при удалении переменной строки запроса непосредственно перед хэштегом
источник
UpdateQueryString('a', null, 'http://www.test.com?a=b#c');
url
для каждой итерации замены. Но это означает, что вы должны ввестиvalue
в аргументы, что оставит строку запроса наполовину удаленной. Чтобы противостоять этому, используйтеundefined
илиnull
в качествеvalue
аргумента, например:url_from_last_iteration = UpdateQueryString(current_ignore_key, undefined/null, url_from_last_iteration);
Предполагая, что вы хотите удалить параметр key = val из URI:
источник
/([&?]key=val*$|key=val&|[?&]key=val(?=#))/
может быть предпочтительнее при использовании линтера,Вот что я использую:
Исходный URL: http://www.example.com/test/hello?id=123&foo=bar
Целевой URL: http://www.example.com/test/hello
источник
Вот полная функция для добавления и удаления параметров на основе этого вопроса и этого github gist: https://gist.github.com/excalq/2961415
Вы можете добавить такие параметры:
И снимаем вот так:
В этом потоке многие говорили, что регулярное выражение, вероятно, не лучшее / стабильное решение ... так что я не уверен на 100%, есть ли у этой вещи какие-то недостатки, но насколько я ее тестировал, она работает довольно хорошо.
источник
Это чистая версия параметра запроса удаления с классом URL для современных браузеров:
URLSearchParams не поддерживается в старых браузерах
https://caniuse.com/#feat=urlsearchparams
IE, Edge (ниже 17) и Safari (ниже 10.3) не поддерживают URLSearchParams внутри класса URL.
Polyfills
Только URLSearchParams полифил
https://github.com/WebReflection/url-search-params
Полный URL-адрес Polyfill и URLSearchParams для соответствия последним спецификациям WHATWG
https://github.com/lifaon74/url-polyfill
источник
Используя jQuery:
источник
Вышеупомянутая версия как функция
источник
Вам следует использовать библиотеку для манипуляций с URI, поскольку сделать это самостоятельно сложнее, чем кажется на первый взгляд. Взгляните на: http://medialize.github.io/URI.js/
источник
Насколько я могу судить, ни одно из вышеперечисленных не может обрабатывать обычные параметры и параметры массива. Вот такой.
Как это использовать:
Конечно, чтобы обновить параметр, просто удалите, а затем добавьте. Не стесняйтесь сделать для него фиктивную функцию.
источник
path.replace(new RegExp("&?"+param+"=[\\w]+", "g"), "");
Я бы изменил регулярное выражение, чтобы[\\w]*
включить такие параметры, как "param =" без значений.Все ответы в этой цепочке имеют недостаток в том, что они не сохраняют якорные / фрагментарные части URL-адресов.
Итак, если ваш URL-адрес выглядит так:
и вы заменяете 'параметр'
вы потеряете фрагмент текста.
Ниже приводится адаптация предыдущих ответов (bobince через LukePH), которая решает эту проблему:
источник
url = urlBase+'?'+pars.join('&');
наurl = urlBase + (pars.length > 0 ? '?' + pars.join('&') : "");
Вот решение, которое:
?
в строке запроса, если был удален последний параметрПримечание: как указано в других ответах, URLSearchParams не поддерживается в IE , поэтому используйте полифилл .
источник
Если это экземпляр
URL
, используйтеdelete
функциюsearchParams
источник
другой прямой и более простой ответ был бы
источник
Модифицированная версия решения от ssh_imov
Звоните так
источник
Это возвращает URL-адрес без ЛЮБЫХ параметров GET:
источник
Я практически написал следующую функцию для обработки параметров url и получения окончательного статуса в виде строки и перенаправления страницы. Надеюсь, это принесет пользу.
Например, когда я нажимаю кнопку, я хочу, чтобы значение страницы было удалено, а значение категории было добавлено.
Думаю, это было очень полезно!
источник
Рад, что вы прокрутили здесь.
Предлагаю вам решить эту задачу следующими возможными решениями:
http://google.com/?myparm
http://google.com/?myparm=1
http://google.com?qp=1&qpqp=2&qp=1
for
цикл и не изменяет массив во время цикла по немуРаботает в IE> 9 (версия ES5)
Необычная версия ES6
Посмотрите, как это работает здесь
источник
источник
источник
Если вам нравится jQuery, есть хороший плагин для работы со строкой запроса:
источник
источник