Дополнительно
Как получить значения строки запроса в JavaScript?
Существует ли способ получения значений строка запроса через jQuery (или без него) без использования плагина?
Если да, то как? Если нет, то существует ли плагин, который может это сделать?
2701
20
Обновление: сентябрь-2018
Вы можете использовать URLSearchParams, который прост и имеет достойную (но не полную) поддержку браузера.
Оригинал
Вам не нужен jQuery для этой цели. Вы можете использовать просто чистый JavaScript:
Использование:
Примечание: Если параметр присутствует несколько раз (
?foo=lorem&foo=ipsum
), вы получите первое значение (lorem
). Стандарта на этот счет не существует, и его использование варьируется, см., например, этот вопрос: Авторитетная позиция дублирующих ключей HTTP GET запроса.ПРИМЕЧАНИЕ: Функция чувствительна к регистру. Если вы предпочитаете нечувствительное к регистру имя параметра, добавьте модификатор 'i' к RegExp.
Это обновление, основанное на новой спецификации URLSearchParams для достижения того же результата более лаконично. См. ответ "URLSearchParams" ниже.
Некоторые из размещенных здесь решений неэффективны. Повторять поиск по регулярному выражению каждый раз, когда скрипту требуется доступ к параметру, совершенно необязательно, достаточно одной единственной функции для разделения параметров на объект в стиле ассоциативного массива. Если вы не работаете с API истории HTML 5, это необходимо только один раз при загрузке страницы. Другие предложения здесь также не позволяют правильно декодировать URL-адрес.
переменные URL-адреса; (окно.onpopstate = функция () { матч ВАР ПЛ = /+/г, // regex для замены дополнение символ с пробелом поиск = /([^&=]+)=?([^&]*)/г расшифруйте = функция (х) { возвращение decodeURIComponent(s.replace(pl, " ")); }, = окно запроса.местоположение.поиск.
ES2015 (ES6)
Без jQuery
При URL вида
?topic=123&name=query+string
будет получен следующий результат:Google method#.
Разбирая код Google, я нашел метод, который они используют:
getUrlParameters
Он обфусцирован, но его можно понять. Он не работает, потому что некоторые переменные не определены.
Они начинают искать параметры в url с
?
, а также с хэша#
. Затем для каждого параметра они разделяют его знаком равенстваb[f][p]("=")
(который выглядит какindexOf
, они используют позицию символа для получения ключа/значения). Разделив его, они проверяют, имеет ли параметр значение или нет, если имеет, то сохраняют значениеd
, в противном случае просто продолжают.В итоге возвращается объект
d
, обрабатывающий экранирование и знак+
. Этот объект точно такой же, как и мой, у него такое же поведение.Мой метод как плагин для jQuery.
Использование
Тест производительности (метод split против метода regex) (jsPerf)
Код подготовки: объявление методов
Код теста разделения
Код проверки регекса
Тестирование в Firefox 4.0 x86 на Windows Server 2008 R2 / 7 x64
Улучшенная версия Артем Баргер'ы ответ:
Для получения более подробной информации о совершенствовании см.: http://james.padolsey.com/javascript/bujs-1-getparameterbyname/
URLSearchParams
В Firefox 44+, оперы 36+, край 17+, сафари 10.3+ и Chrome 49+ поддержка URLSearchParams API-интерфейс:
Есть Гугл-предложил URLSearchParams полифилл для стабильной версии IE.
Это не стандартизировано консорциума W3C, но это живой стандарт WHATWG как средство.
Вы можете использовать его на "место":
или
Или конечно на любой URL:
Вы можете получить параметры также с помощью стенографии `.собственность searchParams на объект url, как это:
Вы читали/набор параметров через вам(ключом)
,
комплект(ключ, значение),
добавить(ключ, значение)АПИ. Вы также можете перебрать все значения для (Пусть п параметры) {}
.А ссылка осуществлению и образец страницы доступны для аудита и тестирования.
Просто еще одна рекомендация. Плагин Перл позволяет извлечь все части URL-адреса, включая якорь, узел, и т. д.
Он может быть использован с или без jQuery.
Использование очень просто и круто:
Однако, по состоянию на 11 ноября 2014 года, изнаночные больше не поддерживается и автор рекомендует использовать URI.js вместо этого. Этот плагин jQuery отличается тем, что она фокусируется на элементы - для использования со строками, просто использовать
Ури
непосредственно, с или без jQuery. Аналогичный код будет выглядеть как таковой, Фуллер документы здесь:многабукаф.
Быстрый, комплексное решение, который обрабатывает многозначные ключи и закодированные символы.
Мульти-подкладка:
Что это за код... на"значение null тогда", короткое замыкание оценки ЕС6 Деструктурируется задания, стрелочные функции, [строки] шаблон6
Пример:
<БР> <ч>
Подробнее... о ванили на JavaScript решение.
To доступ к различным частям местоположения использовать URL-адрес
.(поиск|хэш)
Решение ## простой (пустышка)
&л;ул> <ли>ручки <б>пустые ключи</б> правильно.</ли> <ли>перекрывает <б>Multi-ключей</б> с <б>последние</б> ценностей.</ли> </ул>
Многозначных ключей
Простой ключ проверки(пункт в дикт) ? дикт.пункт.толчок(вал) : дикт.элемент = [Вэл]`
&л;ул> <ли>возвращает <б>блоки</б> наоборот.</ли> <ли>значения доступ в <код>В КТ.ключ[индекс]</код и GT; или <код>КТ[ключа][индекс]</код></ли> </ул>
Закодированных символов?
Используйте
decodeURIComponent()
для второго или как шпагат.Пример:
<БР> <ч>
От комментариев
*!!! Обратите внимание, что
decodeURIComponent(неопределено)
возвращает строку в"не определено"
в. Решение заключается в простом использовании&&
, который обеспечивает, чтоdecodeURIComponent()
не вызывается на неопределенные значения. (См. В "готовое решение" и на самом верху.)<БР> Если строка запроса пуста (
местоположение.поиск == " и"
в), в результате несколько вводит в заблуждениеКТ == {" не то": не определен}
. Он предложил, чтобы проверить строку запроса перед запуском парсинга likeso функции:Roshambo на snipplr.com предлагает простой скрипт для достижения этой цели, описанный в Get URL Parameters with jQuery | Improved. С помощью его скрипта вы также легко сможете вытащить только те параметры, которые вам нужны.
Вот суть:
Затем просто получите параметры из строки запроса.
Так, если URL/строка запроса была
xyz.com/index.html?lang=de
.Просто вызовите
var langval = $.urlParam('lang');
, и все готово.В блоге UZBEKJON есть отличная статья об этом, Получение параметров URL & значений с помощью jQuery.
Если вы используете jQuery, вы можете использовать библиотеку, например jQuery BBQ: Back Button & Query Library.
Редактирование: Добавление примера Deparam:
Если вы хотите просто использовать обычный JavaScript, вы можете использовать...
Из-за нового HTML History API и, в частности,
history.pushState()
иhistory.replaceState()
, URL может измениться, что приведет к аннулированию кэша параметров и их значений.Эта версия будет обновлять свой внутренний кэш параметров при каждом изменении истории.
Просто использовать два разбивает:
Я читал все предыдущие и более полные ответы. Но я думаю, что это самый простой и быстрый способ. Вы можете проверить в см. Этот тест jsperf тест
Чтобы решить проблему в РУП'ы комментарий, добавить условное разбиение, изменив в первой строке в два ниже. Но абсолютной точности означает это's теперь медленнее, чем регулярное выражение (см. см. Этот тест jsperf).
Так что если вы знаете, что вы выиграли'т бежать в РУП'ы встречное случае, это выигрывает. В противном случае, регулярное выражение.
Здесь's мой стаб на Энди Е'отличное решение с в полноценный плагин jQuery:
Синтаксис:
Лучшее из обоих миров!
Если вы'повторно делать больше манипуляций, чем просто парсинг URL-адрес в строке, вы можете найти URI.js полезная. Это библиотека для работы с URL-адреса - и поставляется с все колокола и свистки. (Извините за само рекламу здесь)
чтобы преобразовать ваш файл querystring на карте:
(URI.js также на "исправления" и плохие строки запросов, как
?&фу&&усилителя;бар=баз&
к?фу&бар=Базом
)Мне нравится Райан Фелан'разрешение s. Но я Дон'т вижу никакого смысла расширения jQuery для этого? Нет использования функции jQuery.
С другой стороны, мне нравится встроенная функция в Гугл Хром: окна.расположение.getParameter.
Так почему бы не использовать это? Ладно, другие браузеры Дон'т иметь. Так давайте's создавать эту функцию, если она не существует:
Эта функция является более или менее Райан Фелан, но его заворачивают по-разному: четкое название и никакой зависимости от других библиотек JavaScript. Подробнее об этой функции на моем блоге.
Вот быстрый способ, чтобы получить объект, похожий на РНР параметр$_GET массив:
Использование:
В строке запроса
х=5&г&з=привет&х=6
возвращает объект:Держите его просто в обычный JavaScript-код:
Вызывать ее из любого места в коде JavaScript:
Все эти великие ответы, но мне нужно что-то немного более надежным, и думал, что вы все могли бы получить то, что я создал.
Это простой способ библиотека, которая делает рассечение и обработки параметров URL. Статический метод имеет следующие суб методы, которые можно назвать по теме URL-адрес:
Пример:
Из MDN](https://developer.mozilla.org/en-US/docs/Web/API/URLUtils/search#Get_the_value_of_a_single_search_param):
Я использую много регулярных выражений, но не для этого.
Кажется, что проще и эффективнее для меня, чтобы прочитать строку запроса, как только в моем приложении, и строить объект из всех пар ключ/значение:
Для URL-адреса, такие как
http://domain.com?param1=val1&параметр param2=val2
вы можете получить их значения в коде, как поиск.параметр1 " и " поиск.параметр param2`.Гольф код:
Отобразить его!
На моем Mac:
тест.НТМ?я=могу&и=отображает cheezburger
Способ Рошамбо в jQuery было'принимают t уход декодировать URL-адрес
Просто добавил, что возможность также добавив в оператор return
Теперь вы можете найти обновленные суть: