¿Existe alguna biblioteca de JavaScript que haga un diccionario a partir de la cadena de consulta, ASP.NET
estilo?
Algo que se puede utilizar como:
var query = window.location.querystring["query"]?
¿Se llama "cadena de consulta" de otra forma fuera del .NET
ámbito? ¿Por qué no se location.search
divide en una colección de clave / valor ?
EDITAR : He escrito mi propia función, pero ¿alguna biblioteca importante de JavaScript hace esto?
javascript
query-string
núcleo
fuente
fuente
Respuestas:
¿Quizás http://plugins.jquery.com/query-object/ ?
Esta es la bifurcación https://github.com/sousk/jquery.parsequery#readme .
fuente
Puede extraer los pares clave / valor de la propiedad location.search , esta propiedad tiene la parte de la URL que sigue a? símbolo, incluido el? símbolo.
fuente
dork.com/?equation=10=2
...?val=foo&val=bar&val=baz
¿cómo se adaptaría a esto?val=foo&val=bar&val=baz
; tendría que serval[]=foo&val[]=bar&val[]=baz
%20
's, así que lo reemplacéresult[keyValuePair[0]] = keyValuePair[1] || '';
conresult[keyValuePair[0]] = decodeURIComponent((keyValuePair[1]+'').replace(/\+/g, '%20')) || '';
tl; dr solución en una sola línea (ish) de código usando vainilla javascript
Para la cadena de consulta
?a=1&b=2&c=3&d&e
, devuelve:claves de varios valores y caracteres codificados ?
Vea la respuesta original en ¿Cómo puedo obtener valores de cadena de consulta en JavaScript?
fuente
Después de encontrar esta publicación, al mirarme a mí mismo pensé que debería agregar que no creo que la solución más votada sea la mejor. No maneja valores de matriz (como? A = foo & a = bar; en este caso, esperaría obtener un retorno ['foo', 'bar']). También, por lo que puedo decir, no tiene en cuenta los valores codificados, como la codificación de caracteres hexadecimales donde% 20 representa un espacio (ejemplo:? A = Hola% 20World) o el símbolo más que se usa para representar un espacio (ejemplo :? a = Hola + Mundo).
Node.js ofrece lo que parece una solución muy completa para el análisis de cadenas de consulta. Sería fácil de sacar y usar en su propio proyecto ya que está bastante bien aislado y bajo una licencia permisiva.
El código se puede ver aquí: https://github.com/joyent/node/blob/master/lib/querystring.js
Las pruebas que tiene Node se pueden ver aquí: https://github.com/joyent/node/blob/master/test/simple/test-querystring.js Sugeriría probar algunas de estas con la respuesta popular para ver cómo funciona los maneja.
También hay un proyecto en el que participé para agregar específicamente esta funcionalidad. Es un puerto del módulo de análisis de cadenas de consulta lib estándar de Python. Mi bifurcación se puede encontrar aquí: https://github.com/d0ugal/jquery.qeeree
fuente
O puede usar la biblioteca sugar.js .
De sugarjs.com:
Ejemplo:
fuente
Si tiene la cadena de consulta a mano, use esto:
fuente
fuente
decodeURIComponent
al menos las cadenas extraídas.decodeURIComponent
embargo, mis comentarios sobre el stand.Vale la pena señalar que la biblioteca que mencionó John Slegers tiene una dependencia de jQuery, sin embargo, aquí hay una versión que es Javascript vanilla.
https://github.com/EldonMcGuinness/querystring.js
Simplemente habría comentado su publicación, pero no tengo la reputación para hacerlo. : /
Ejemplo:
El siguiente ejemplo procesa la siguiente cadena de consulta, aunque irregular:
fuente
El código
Esta esencia de Eldon McGuinness es, con mucho, la implementación más completa de un analizador de cadenas de consulta de JavaScript que he visto hasta ahora.
Desafortunadamente, está escrito como un complemento de jQuery.
Lo reescribí en Vanilla JS e hice algunas mejoras:
Cómo usarlo
Salida
Vea también este Fiddle .
fuente
fuente
Me gusta mantenerlo simple, legible y pequeño.
Ejemplo:
fuente
Función que escribí para un requisito similar a este con manipulación pura de cadenas de JavaScript
Uso:
fuente
?
es básicamente lo mismo que las dos respuestas anteriores.Si está utilizando lodash + ES6, aquí hay una solución de una línea:
_.object(window.location.search.replace(/(^\?)/, '').split('&').map(keyVal => keyVal.split('=')));
fuente
De acuerdo, ya que todos están ignorando mi pregunta real, je, ¡también publicaré la mía! Esto es lo que tengo:
Y las pruebas:
Eso sí, pensaste, JavaScript no es mi lengua materna.
De todos modos, estoy buscando una biblioteca de JavaScript (por ejemplo, jQuery, Prototype) que ya tenga una escrita. :)
fuente
Sobre la base de la respuesta de @CMS, tengo lo siguiente (en CoffeeScript que se puede convertir fácilmente a JavaScript):
Puede obtener fácilmente lo que necesita con:
La ganancia aquí es una interfaz orientada a objetos (en lugar de funcional) y se puede hacer en cualquier cadena (no solo en location.search).
Si ya está utilizando una biblioteca de JavaScript, esta función ya existe. Por ejemplo, aquí está la versión de Prototype
fuente