Есть ли какая-нибудь библиотека JavaScript, которая делает словарь из строки запроса, ASP.NET
стиля?
Что-то, что можно использовать как:
var query = window.location.querystring["query"]?
Является ли «Строка запроса» называется что - то еще за пределами .NET
области? Почему не location.search
разбивается на коллекцию ключей / значений ?
РЕДАКТИРОВАТЬ : Я написал свою собственную функцию, но делает ли это какая-либо основная библиотека JavaScript?
Ответы:
Возможно http://plugins.jquery.com/query-object/ ?
Это его вилка https://github.com/sousk/jquery.parsequery#readme .
источник
Вы можете извлечь пары ключ / значение из свойства location.search , это свойство имеет часть URL-адреса, следующую за? символ, включая? условное обозначение.
источник
dork.com/?equation=10=2
...?val=foo&val=bar&val=baz
как бы вы это разместили?val=foo&val=bar&val=baz
; так должно бытьval[]=foo&val[]=bar&val[]=baz
%20
's, поэтому я заменил егоresult[keyValuePair[0]] = keyValuePair[1] || '';
наresult[keyValuePair[0]] = decodeURIComponent((keyValuePair[1]+'').replace(/\+/g, '%20')) || '';
tl; dr решение в одной (ish) строке кода с использованием ванильного javascript
Для строки запроса
?a=1&b=2&c=3&d&e
возвращается:многозначные ключи и закодированные символы ?
См. Исходный ответ в разделе Как получить значения строки запроса в JavaScript?
источник
После того, как я нашел этот пост, я подумал, что должен добавить, что не думаю, что решение, получившее наибольшее количество голосов, является лучшим. Он не обрабатывает значения массива (например,? A = foo & a = bar - в этом случае я ожидал бы, что a вернет ['foo', 'bar']). Он также, насколько я могу судить, не принимает во внимание закодированные значения, такие как шестнадцатеричная кодировка символов, где% 20 представляет пробел (пример:? A = Hello% 20World) или символ плюса, используемый для представления пробела (пример :? a = Привет + Мир).
Node.js предлагает то, что выглядит как очень полные решения для синтаксического анализа строки запроса. Его было бы легко извлечь и использовать в своем собственном проекте, поскольку он достаточно хорошо изолирован и находится под разрешающей лицензией.
Код для него можно посмотреть здесь: https://github.com/joyent/node/blob/master/lib/querystring.js
Тесты, которые есть в Node, можно увидеть здесь: https://github.com/joyent/node/blob/master/test/simple/test-querystring.js Я бы предложил попробовать некоторые из них с популярным ответом, чтобы увидеть, как это обрабатывает их.
Еще есть проект, в котором я участвовал, чтобы специально добавить эту функцию. Это порт стандартного модуля синтаксического анализа строки запроса библиотеки Python. Мой форк можно найти здесь: https://github.com/d0ugal/jquery.qeeree
источник
Или вы можете использовать библиотеку sugar.js .
С сайта sugarjs.com:
Пример:
источник
Если у вас есть строка запроса, используйте это:
источник
источник
decodeURIComponent
крайней мере, вам не хватает извлеченных строк.decodeURIComponent
стенда.Стоит отметить, что упомянутая Джоном Слегерсом библиотека действительно имеет зависимость от jQuery, но вот версия, которая является ванильным Javascript.
https://github.com/EldonMcGuinness/querystring.js
Я бы просто прокомментировал его пост, но у меня нет репутации для этого. : /
Пример:
В приведенном ниже примере обрабатывается следующая, хотя и нерегулярная, строка запроса:
источник
Код
Этот Gist Элдона МакГиннесса , безусловно, является наиболее полной реализацией синтаксического анализатора строки запроса JavaScript, которую я когда-либо видел.
К сожалению, он написан как плагин jQuery.
Я переписал его на ванильный JS и сделал несколько улучшений:
Как это использовать
Вывод
См. Также этот Fiddle .
источник
источник
Мне нравится, чтобы он был простым, читаемым и маленьким.
Пример:
источник
Функция, которую я написал для требования, аналогичного этому, с чистым манипулированием строкой javascript
Использование:
источник
?
это в основном то же самое, что и два ответа выше вас?Если вы используете lodash + ES6, вот однострочное решение:
_.object(window.location.search.replace(/(^\?)/, '').split('&').map(keyVal => keyVal.split('=')));
источник
Хорошо, раз все игнорируют мой вопрос, хех, я тоже отправлю свой! Вот что у меня есть:
И тесты:
Вы подумали, что JavaScript не мой родной язык.
В любом случае, я ищу библиотеку JavaScript (например, jQuery, Prototype), в которой она уже написана. :)
источник
Основываясь на ответе @CMS, у меня есть следующее (в CoffeeScript, который можно легко преобразовать в JavaScript):
Вы можете легко взять то, что вам нужно:
Победа здесь - объектно-ориентированный интерфейс (вместо функционального), и это можно сделать с любой строкой (а не только с location.search).
Если вы уже используете библиотеку JavaScript, эта функция уже существует. Например, вот версия Prototype
источник