Existe alguma biblioteca JavaScript que faz um dicionário da string de consulta, ASP.NET
estilo?
Algo que pode ser usado como:
var query = window.location.querystring["query"]?
A "string de consulta" é chamada de outra coisa fora do .NET
reino? Por que não é location.search
dividido em uma coleção de chave / valor ?
EDIT : Eu escrevi minha própria função, mas alguma biblioteca JavaScript importante faz isso?
javascript
query-string
testemunho
fonte
fonte
Respostas:
Talvez http://plugins.jquery.com/query-object/ ?
Esta é a bifurcação https://github.com/sousk/jquery.parsequery#readme .
fonte
Você pode extrair os pares de chave / valor da propriedade location.search , esta propriedade tem a parte do URL que segue o? símbolo, incluindo o? símbolo.
fonte
dork.com/?equation=10=2
...?val=foo&val=bar&val=baz
como você acomodaria isso?val=foo&val=bar&val=baz
; teria que serval[]=foo&val[]=bar&val[]=baz
%20
's, então substituíresult[keyValuePair[0]] = keyValuePair[1] || '';
porresult[keyValuePair[0]] = decodeURIComponent((keyValuePair[1]+'').replace(/\+/g, '%20')) || '';
solução tl; dr em uma única linha (ish) de código usando vanilla javascript
Para querystring,
?a=1&b=2&c=3&d&e
ele retorna:chaves com vários valores e caracteres codificados ?
Veja a resposta original em Como posso obter valores de string de consulta em JavaScript?
fonte
Depois de encontrar esta postagem, ao olhar para mim mesmo, pensei que deveria acrescentar que não acho a solução mais votada a melhor. Ele não lida com valores de array (como? A = foo & a = bar - neste caso, eu esperaria obter a para retornar ['foo', 'bar']). Tanto quanto posso dizer, não leva em consideração os valores codificados - como a codificação de caracteres hexadecimais em que% 20 representa um espaço (exemplo:? A = Hello% 20World) ou o símbolo de adição a ser usado para representar um espaço (exemplo :? a = Olá + Mundo).
Node.js oferece o que parece ser uma solução muito completa para análise de string de consulta. Seria fácil retirá-lo e usá-lo em seu próprio projeto, já que está bastante isolado e sob uma licença permissiva.
O código pode ser visto aqui: https://github.com/joyent/node/blob/master/lib/querystring.js
Os testes que o Node possui podem ser vistos aqui: https://github.com/joyent/node/blob/master/test/simple/test-querystring.js Eu sugeriria tentar alguns deles com a resposta popular para ver como isso lida com eles.
Há também um projeto no qual estive envolvido para adicionar especificamente essa funcionalidade. É uma porta do módulo de análise de string de consulta lib padrão do Python. Meu garfo pode ser encontrado aqui: https://github.com/d0ugal/jquery.qeeree
fonte
Ou você pode usar a biblioteca sugar.js .
De sugarjs.com:
Exemplo:
fonte
Se você tiver a querystring em mãos, use isto:
fonte
fonte
decodeURIComponent
nas strings extraídas, pelo menos.decodeURIComponent
estande, no entanto.É importante notar que a biblioteca que John Slegers mencionou tem uma dependência jQuery, porém aqui está uma versão que é Javascript simples.
https://github.com/EldonMcGuinness/querystring.js
Eu teria simplesmente comentado sobre sua postagem, mas não tenho reputação para fazê-lo. : /
Exemplo:
O exemplo abaixo processa a seguinte string de consulta, embora irregular:
fonte
O código
Este Gist de Eldon McGuinness é de longe a implementação mais completa de um analisador de string de consulta JavaScript que vi até agora.
Infelizmente, ele foi escrito como um plugin jQuery.
Reescrevi como vanilla JS e fiz algumas melhorias:
Como usá-lo
Resultado
Veja também este Fiddle .
fonte
fonte
Gosto de mantê-lo simples, legível e pequeno.
Exemplo:
fonte
Função que escrevi para um requisito semelhante a este com manipulação de string javascript puro
Uso:
fonte
?
isso é basicamente o mesmo que as duas respostas acima de você?Se você estiver usando lodash + ES6, aqui está uma solução de uma linha:
_.object(window.location.search.replace(/(^\?)/, '').split('&').map(keyVal => keyVal.split('=')));
fonte
Ok, já que todos estão ignorando minha pergunta real, heh, vou postar a minha também! Aqui está o que tenho:
E os testes:
Lembre-se de que você pensou, JavaScript não é minha língua nativa.
De qualquer forma, estou procurando uma biblioteca JavaScript (por exemplo, jQuery, Prototype) que já tem uma escrita. :)
fonte
Com base na resposta de @CMS, tenho o seguinte (em CoffeeScript, que pode ser facilmente convertido para JavaScript):
Você pode facilmente pegar o que precisa com:
A vitória aqui é uma interface orientada a objetos (em vez de funcional) e pode ser feita em qualquer string (não apenas location.search).
Se você já está usando uma biblioteca JavaScript, esta função já existe. Por exemplo, aqui está a versão do Prototype
fonte