У меня есть URL с некоторыми параметрами GET следующим образом:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
Мне нужно получить всю стоимость c
. Я пытался прочитать URL, но я получил только m2
. Как мне сделать это с помощью JavaScript?
У меня есть URL с некоторыми параметрами GET следующим образом:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
Мне нужно получить всю стоимость c
. Я пытался прочитать URL, но я получил только m2
. Как мне сделать это с помощью JavaScript?
Ответы:
В самом JavaScript нет ничего встроенного для обработки параметров строки запроса.
Код, работающий в (современном) браузере, вы можете использовать
URL
объект (который является частью API, предоставляемого браузерами для JS):Для более старых браузеров (включая Internet Explorer) вы можете использовать этот polyfill или код из оригинальной версии этого ответа, предшествующего
URL
:Вы можете получить доступ
location.search
, который даст вам от?
символа до конца URL-адреса или начала идентификатора фрагмента (#foo), в зависимости от того, что произойдет раньше.Тогда вы можете разобрать это с этим:
Вы можете получить строку запроса из URL текущей страницы с помощью:
источник
URL
в дополнение к тому, для которогоURLSearchParams
. Или вы можете избежать этой проблемы, заменив строкуvar c = url.searchParams.get("c");
в ответе выше наvar c = new URLSearchParams(window.location.search).get("c");
.new URL()
ожидает получить правильно закодированный URL в качестве аргумента.decodeURIComponent
ожидает, что будет передан компонент URL, а не весь URL.decodeURIComponent
не должен использоваться в этом случаеparse_query_string
Функция делает двойное декодированиеvalue
. Указанный=
@ManelClos выдаваемый адрес можно исправить, добавив второй параметр2
(limit
) вvars[i].split()
.Большинство реализаций, которые я видел, пропускают URL-декодирование имен и значений.
Вот общая полезная функция, которая также выполняет правильное декодирование URL:
источник
qs.split('+').join(' ');
и нетqs.replace(/\+/g, ' ');
?источник
источник
Это простой способ проверить только один параметр:
Пример URL:
Пример Javascript:
если в URL существует «myParam» ... переменная myParam будет содержать «2», в противном случае она будет неопределенной.
Может быть, вы хотите значение по умолчанию, в этом случае:
Обновление: это работает лучше:
И это работает правильно, даже если URL полон параметров.
источник
http://myserver/action?myParam=2&anotherParam=3
, даст не"2"
но"2&anotherParam=3"
.(location.search.split('myParam=')[1]||'').split('&')[0]
- использовать с несколькими параметрами или, возможно, отсутствуетmyParam
.location.search.split('myParam=').splice(1).join('').split('&')[0]
[?|&]
как в[?|&]myParam=([^&]+)
result = decodeURIComponent(result);
Поставщики браузеров реализовали собственный способ сделать это через URL и URLSearchParams.
В настоящее время поддерживается в Firefox, Opera, Safari, Chrome и Edge. Список поддержки браузеров смотрите здесь .
https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams https://developer.mozilla.org/en-US/docs/Web/API/URL/URL
https://url.spec.whatwg.org/
Эрик Бидельман, инженер из Google, рекомендует использовать это заполнение для неподдерживаемых браузеров.
источник
new URLSearchParams("www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5").get('a')
возвращаетсяnull
за мной? (На Chrome стабильно).b
и,c
кажется, работает хорошо.url.searchParams
вместо этогоnew URLSearchParams(url.search)
.Я нашел это очень давно:
Тогда назовите это так:
источник
decodeURIComponent()
на значении, потому что это то, с чем вы обычно хотите работать; используйтеwindow.location.search
вместоwindow.location.href
, потому что вас интересуют только параметры, а не весь URL.var vars = {}; window.location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { vars[key] = value; }); return vars;
Вы можете получить строку запроса
location.search
, а затем разделить все после знака вопроса:источник
?array[]=1&array[]=2
производит{"array[]": "2"}
, что явно неправильно.[]
шаблон имеет значение только в некоторых случаях (например, PHP), но не в других. Так что не «явно неправильно» - просто не реализовано для обработки нестандартного случая, который вам может понадобиться, а может и нет.Я написал более простое и элегантное решение.
источник
[0-9]
на\d
Супер простой способ с использованием URLSearchParams .
В настоящее время поддерживается в Chrome, Firefox, Safari, Edge и других .
источник
Вот рекурсивное решение, которое не имеет регулярных выражений и имеет минимальную мутацию (мутирует только объект params, что, я считаю, неизбежно в JS).
Это круто, потому что это:
Код:
источник
Я сделал функцию, которая делает это:
Обновление от 26.05.2017, здесь приведена реализация ES7 (работает с предустановленным этапом babel 0, 1, 2 или 3):
Некоторые тесты:
Обновление 26.03.2008, вот реализация Typescript:
Обновление 13.02.2009, вот обновленная реализация TypeScript, которая работает с TypeScript 3.
источник
Object {"": ""}
Посмотри это
источник
Решение ECMAScript 6:
источник
function urlParams(url) { const [, searchParams = ''] = url.split('?') return searchParams.split('&') .map(v => v.split('=')) .reduce((map, [key = '', value]) => key.length ? map.set(key, decodeURIComponent(value)) : map, new Map())
}я использую
источник
window.location.search
не будет включать хэш как#id
.location.href
для сопоставления результата вместо.location.search
Спасибо.Я использую библиотеку parseUri . Это позволяет вам делать именно то, что вы просите:
источник
Вот мое решение. По совету Энди Э, отвечая на этот вопрос , производительность вашего скрипта не очень хорошая, если он постоянно строит различные строки регулярных выражений, запускает циклы и т. Д. Только для получения одного значения. Итак, я придумал более простой скрипт, который возвращает все параметры GET в одном объекте. Вы должны вызвать его только один раз, присвоить результат переменной, а затем в любой момент в будущем получить любое значение из этой переменной, используя соответствующий ключ. Обратите внимание, что он также заботится о декодировании URI (например,% 20) и заменяет + пробелом:
Итак, вот несколько тестов скрипта для вас:
источник
Или, если вы не хотите заново изобретать колесо анализа URI, используйте URI.js
Чтобы получить значение параметра с именем foo:
Что это делает
(передача true указывает, что это нужно для вывода объекта)
Вот скрипка для этого .... http://jsfiddle.net/m6tett01/12/
источник
Для значения одного параметра, такого как index.html? Msg = 1, используйте следующий код:
Для всех значений параметра используйте следующий код,
источник
Здесь я публикую один пример. Но это в jQuery. Надеюсь, это поможет другим:
источник
Кратчайший путь:
источник
new URL(location.href).searchParams.get("my_key")
over,URLSearchParams
так как последний потерпит неудачу при получении первого параметра запроса любого URL.на этот вопрос слишком много ответов, поэтому я добавляю еще один.
Применение:
это справляется с пустыми параметрами (эти ключи присутствуют без
"=value"
), предоставлением как скалярного, так и основанного на массиве API для поиска значений, а также с надлежащим декодированием компонента URI.источник
Самый простой способ с использованием
replace()
метода:Из
urlStr
строки:или с текущего URL :
Объяснение:
document.URL
- интерфейс возвращает местоположение документа (URL страницы) в виде строки.replace()
- метод возвращает новую строку с некоторыми или всеми совпадениями шаблона, замененными заменой ./.*param_name=([^&]*).*/
- регулярное выражение шаблон , заключенный между косыми чертами, что означает:.*
- ноль или более любых символов,param_name=
- имя параметра, которое занято,()
- группа в регулярном выражении,[^&]*
- один или несколько любых символов, кроме&
,|
- чередование,$1
- ссылка на первую группу в регулярном выражении.источник
Еще одно предложение.
Уже есть несколько хороших ответов, но я нашел их излишне сложными и трудными для понимания. Это короткий, простой и возвращает простой ассоциативный массив с именами ключей, соответствующими именам токенов в URL.
Я добавил версию с комментариями ниже для тех, кто хочет учиться.
Обратите внимание, что для его цикла используется jQuery ($ .each), который я рекомендую вместо forEach. Я считаю, что проще обеспечить кросс-браузерную совместимость, используя jQuery по всем направлениям, вместо того, чтобы подключать отдельные исправления для поддержки тех функций, которые не поддерживаются в старых браузерах.
Изменить: После того, как я написал это, я заметил ответ Эрика Эллиотта, который почти такой же, хотя он использует forEach, хотя я вообще против (по причинам, изложенным выше).
Комментируемая версия:
Для приведенных ниже примеров мы примем этот адрес:
Вы можете назначить URL-токены своей переменной:
Затем обратитесь к каждому URL-токену по имени следующим образом:
Это напечатало бы "4".
Вы также можете просто обратиться к имени токена непосредственно из функции:
... который напечатал бы "Мюррей".
источник
Получил отсюда: http://jquery-howto.blogspot.ru/2009/09/get-url-parameters-values-with-jquery.html
источник
Простой способ
затем назовите это как getParams (URL)
источник
Мне нужно было прочитать переменную URL GET и выполнить действие, основанное на параметре url. Я искал решение проблемы и наткнулся на этот маленький кусочек кода. Он в основном читает URL текущей страницы, выполняет некоторое регулярное выражение для URL, затем сохраняет параметры URL в ассоциативном массиве, к которому мы можем легко получить доступ.
Например, если у нас был следующий URL с javascript внизу.
Все, что нам нужно сделать, чтобы получить параметры ID и страницу, это вызвать это:
Код будет:
источник
источник
Этот Gist от Eldon McGuinness на сегодняшний день является наиболее полной реализацией парсера строки запроса JavaScript, который я когда-либо видел.
К сожалению, он написан как плагин jQuery.
Я переписал его на vanilla JS и сделал несколько улучшений:
Смотрите также эту скрипку .
источник
Элегантное, функциональное стилевое решение
Давайте создадим объект, содержащий имена параметров URL в качестве ключей, после чего мы можем легко извлечь параметр по его имени:
источник
return
Вот что я делаю:
источник