Tengo una URL con algunos parámetros GET de la siguiente manera:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
Necesito obtener todo el valor de c
. Traté de leer la URL, pero solo obtuve m2
. ¿Cómo hago esto usando JavaScript?
Tengo una URL con algunos parámetros GET de la siguiente manera:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
Necesito obtener todo el valor de c
. Traté de leer la URL, pero solo obtuve m2
. ¿Cómo hago esto usando JavaScript?
Respuestas:
El propio JavaScript no tiene nada incorporado para manejar los parámetros de la cadena de consulta.
El código que se ejecuta en un navegador (moderno) puede usar el
URL
objeto (que es parte de las API proporcionadas por los navegadores a JS):Para navegadores más antiguos (incluido Internet Explorer), puede usar este polyfill o el código de la versión original de esta respuesta anterior a
URL
:Podrías acceder
location.search
, lo que te daría desde el?
carácter hasta el final de la URL o el comienzo del identificador de fragmento (#foo), lo que ocurra primero.Entonces puedes analizarlo con esto:
Puede obtener la cadena de consulta de la URL de la página actual con:
fuente
URL
además del paraURLSearchParams
. O puede esquivar este problema reemplazando la líneavar c = url.searchParams.get("c");
en la respuesta anterior convar c = new URLSearchParams(window.location.search).get("c");
.new URL()
espera recibir una URL correctamente codificada como argumento.decodeURIComponent
espera que se le pase un componente de una URL, no una URL completa.decodeURIComponent
no debería usarse en este casoparse_query_string
función realiza una doble decodificación devalue
. El=
emitido mencionado por @ManelClos puede abordarse agregando un segundo parámetro2
(limit
) avars[i].split()
.La mayoría de las implementaciones que he visto pierden URL-decodificación de los nombres y los valores.
Aquí hay una función de utilidad general que también hace una decodificación de URL adecuada:
fuente
qs.split('+').join(' ');
y noqs.replace(/\+/g, ' ');
?fuente
fuente
Esta es una manera fácil de verificar solo un parámetro:
URL de ejemplo:
Javascript de ejemplo:
si "myParam" existe en la URL ... la variable myParam contendrá "2", de lo contrario será indefinido.
Quizás desee un valor predeterminado, en ese caso:
Actualización: esto funciona mejor:
Y funciona bien incluso cuando la URL está llena de parámetros.
fuente
http://myserver/action?myParam=2&anotherParam=3
, no daría"2"
sino"2&anotherParam=3"
.(location.search.split('myParam=')[1]||'').split('&')[0]
- Para usar con múltiples parámetros o posiblemente faltanmyParam
.location.search.split('myParam=').splice(1).join('').split('&')[0]
[?|&]
como en[?|&]myParam=([^&]+)
result = decodeURIComponent(result);
Los proveedores de navegadores han implementado una forma nativa de hacerlo a través de URL y URLSearchParams.
Actualmente compatible con Firefox, Opera, Safari, Chrome y Edge. Para obtener una lista de compatibilidad con el navegador, consulte aquí .
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/
Eric Bidelman, ingeniero de Google, recomienda usar este polyfill para navegadores no compatibles.
fuente
new URLSearchParams("www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5").get('a')
regresanull
por mí? (En Chrome estable).b
yc
parece funcionar bienurl.searchParams
lugarnew URLSearchParams(url.search)
.Encontré esto hace mucho tiempo, muy fácil:
Entonces llámalo así:
fuente
decodeURIComponent()
en valor, porque eso es con lo que generalmente desea trabajar; use enwindow.location.search
lugar dewindow.location.href
, porque solo le interesan los parámetros, no la url completa.var vars = {}; window.location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { vars[key] = value; }); return vars;
Puede obtener la cadena de consulta
location.search
, luego puede dividir todo después del signo de interrogación:fuente
?array[]=1&array[]=2
produce{"array[]": "2"}
, lo que está claramente mal.[]
patrón solo tiene un significado en algunos casos (por ejemplo, PHP), pero no en otros. Por lo tanto, no está "claramente equivocado", simplemente no se implementó para manejar un caso no estándar que puede o no necesitar manejar.Escribí una solución más simple y elegante.
fuente
[0-9]
por\d
Una forma super simple usando URLSearchParams .
Actualmente es compatible con Chrome, Firefox, Safari, Edge y otros .
fuente
Aquí hay una solución recursiva que no tiene expresiones regulares y tiene una mutación mínima (solo el objeto params está mutado, lo que creo que es inevitable en JS).
Es asombroso porque:
Código:
fuente
Hice una función que hace esto:
Actualización 5/26/2017, aquí hay una implementación de ES7 (se ejecuta con las etapas preestablecidas de babel 0, 1, 2 o 3):
Algunas pruebas:
Actualización 26/03/2018, aquí hay una implementación de Typecript:
Actualización 2/13/2019, aquí hay una implementación actualizada de TypeScript que funciona con TypeScript 3.
fuente
Object {"": ""}
Mira esto
fuente
Solución ECMAScript 6:
fuente
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())
yo suelo
fuente
window.location.search
no incluirá hash like#id
.location.href
coincidir con el resultado en lugar del.location.search
Gracias.Yo uso la biblioteca parseUri . Le permite hacer exactamente lo que está pidiendo:
fuente
Aquí está mi solución. Como aconsejó Andy E al responder a esta pregunta , no es bueno para el rendimiento de su script si está creando repetidamente varias cadenas de expresiones regulares, ejecutando bucles, etc. solo para obtener un valor único. Entonces, se me ocurrió un script más simple que devuelve todos los parámetros GET en un solo objeto. Debe llamarlo solo una vez, asignar el resultado a una variable y luego, en cualquier momento en el futuro, obtener cualquier valor que desee de esa variable usando la tecla apropiada. Tenga en cuenta que también se encarga de la decodificación de URI (es decir, cosas como% 20) y reemplaza + con un espacio:
Entonces, aquí hay algunas pruebas de la secuencia de comandos para que vea:
fuente
O si no desea reinventar la rueda de análisis URI, use URI.js
Para obtener el valor de un parámetro llamado foo:
Lo que eso hace es
(pasar verdadero le dice que genere un objeto)
Aquí hay un violín para esto ... http://jsfiddle.net/m6tett01/12/
fuente
Para un valor de parámetro único como este index.html? Msg = 1 use el siguiente código,
Para el valor de todos los parámetros, use el siguiente código,
fuente
Aquí estoy publicando un ejemplo. Pero está en jQuery. Espero que ayude a otros:
fuente
El camino más corto:
fuente
new URL(location.href).searchParams.get("my_key")
overURLSearchParams
ya que este último fallará al recuperar el primer parámetro de consulta de cualquier URL.Esta pregunta tiene demasiadas respuestas, así que estoy agregando otra.
uso:
esto hace frente a los parámetros vacíos (esas claves presentes sin
"=value"
), la exposición de una API de recuperación de valores escalar y basada en una matriz, así como la decodificación de componentes URI adecuada.fuente
La forma más fácil de usar el
replace()
método:De la
urlStr
cadena:o desde la URL actual :
Explicación:
document.URL
- La interfaz devuelve la ubicación del documento (URL de la página) como una cadena.replace()
- El método devuelve una nueva cadena con algunas o todas las coincidencias de un patrón reemplazado por un reemplazo ./.*param_name=([^&]*).*/
- el patrón de expresión regular encerrado entre barras que significa:.*
- cero o más de cualquier personaje,param_name=
- nombre del parámetro que está serched,()
- grupo en expresión regular,[^&]*
- uno o más de los caracteres&
, excepto|
- alternancia,$1
- referencia al primer grupo en expresión regular.fuente
Otra sugerencia más.
Ya hay algunas buenas respuestas, pero las encontré innecesariamente complejas y difíciles de entender. Esto es breve, simple y devuelve una matriz asociativa simple con nombres de claves correspondientes a los nombres de token en la URL.
Agregué una versión con comentarios a continuación para aquellos que quieran aprender.
Tenga en cuenta que esto se basa en jQuery ($ .each) para su bucle, que recomiendo en lugar de forEach. Me resulta más sencillo garantizar la compatibilidad entre navegadores utilizando jQuery en todos los ámbitos en lugar de conectar soluciones individuales para admitir las nuevas funciones que no se admiten en los navegadores más antiguos.
Editar: Después de escribir esto, noté la respuesta de Eric Elliott, que es casi la misma, aunque se usa para cada uno, mientras que generalmente estoy en contra (por las razones mencionadas anteriormente).
Versión comentada:
Para los ejemplos a continuación asumiremos esta dirección:
Puede asignar los tokens de URL a su propia variable:
Luego, consulte cada token de URL por nombre de esta manera:
Esto imprimiría "4".
También puede simplemente referirse a un nombre de token de la función directamente:
... que imprimiría "murray".
fuente
Obtenido de aquí: http://jquery-howto.blogspot.ru/2009/09/get-url-parameters-values-with-jquery.html
fuente
Manera simple
luego llámalo como getParams (url)
fuente
Tuve la necesidad de leer una variable GET de URL y completar una acción basada en el parámetro url. Busqué una solución alta y baja y encontré este pequeño código. Básicamente, lee la URL de la página actual, realiza alguna expresión regular en la URL y luego guarda los parámetros de la URL en una matriz asociativa, a la que podemos acceder fácilmente.
Entonces, como ejemplo, si tuviéramos la siguiente URL con el JavaScript en la parte inferior en su lugar.
Todo lo que deberíamos hacer para obtener los parámetros id y página es llamar a esto:
El código será:
fuente
fuente
Este Gist de Eldon McGuinness es, con mucho, la implementación más completa de un analizador de cadenas de consulta JavaScript que he visto hasta ahora.
Desafortunadamente, está escrito como un complemento jQuery.
Lo reescribí a vanilla JS e hice algunas mejoras:
Ver también este violín .
fuente
Solución de estilo elegante y funcional.
Creemos un objeto que contenga nombres de parámetros de URL como claves, luego podemos extraer fácilmente el parámetro por su nombre:
fuente
return
Esto es lo que hago:
fuente