¿Hay una mejor manera de eliminar un parámetro de una cadena de consulta en una cadena URL en JavaScript estándar que no sea mediante el uso de una expresión regular?
Esto es lo que se me ocurrió hasta ahora, que parece funcionar en mis pruebas, ¡pero no me gusta reinventar el análisis de la cadena de consulta!
function RemoveParameterFromUrl( url, parameter ) {
if( typeof parameter == "undefined" || parameter == null || parameter == "" ) throw new Error( "parameter is required" );
url = url.replace( new RegExp( "\\b" + parameter + "=[^&;]+[&;]?", "gi" ), "" ); "$1" );
// remove any leftover crud
url = url.replace( /[&;]$/, "" );
return url;
}
javascript
query-string
Matthew Lock
fuente
fuente
url= urlparts[0]+'?'+pars.join('&');
aurl= urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : "");
Los navegadores modernos proporcionan una
URLSearchParams
interfaz para trabajar con parámetros de búsqueda. Que tiene undelete
método que elimina el parámetro por nombre.fuente
URLSearchParams
no es compatible con IE, Edge 16 y iOS 10.2 Safari. (ref: caniuse.com/#feat=urlsearchparams )Copiado de la respuesta de bobince, pero lo hizo compatible con signos de interrogación en la cadena de consulta, por ejemplo
http://www.google.com/search?q=test???+something&aq=f
¿Es válido tener más de un signo de interrogación en una URL?
fuente
???
sintaxis no es válida y nunca debe aparecer en una URL`.return url.endsWith("?") ? url.slice(0,-1) : url;
para cubrir el caso en el que el parámetro que se eliminará es el único en la cadena de consultaNo veo problemas importantes con una solución regex. Pero no olvides preservar el identificador de fragmento (texto después del
#
).Aquí está mi solución:
Y para el punto de bobince, sí, necesitarías escapar de los
.
caracteres en los nombres de los parámetros.fuente
url.replace(new RegExp('^([^#]*\?)(([^#]*)&)?' + parameter + '(\=[^&#]*)?(&|#|$)' ), '$1$3$5').replace(/^([^#]*)((\?)&|\?(#|$))/,'$1$3$4')
Puede cambiar la URL con:
de esta manera, puede sobrescribir la URL sin el parámetro de búsqueda, lo uso para limpiar la URL después de tomar los parámetros GET.
fuente
Cualquier persona interesada en una solución regex he creado esta función para agregar / eliminar / actualizar un parámetro de cadena de consulta. Si no se proporciona un valor, se eliminará el parámetro; si se proporciona uno, se agregará / actualizará el parámetro. Si no se proporciona ninguna URL, se tomará de window.location. Esta solución también tiene en cuenta el ancla de la url.
ACTUALIZAR
Hubo un error al eliminar el primer parámetro en la cadena de consulta, he reelaborado la expresión regular y la prueba para incluir una solución.
ACTUALIZACIÓN 2
Actualización de @schellmax para corregir la situación en la que se pierde el símbolo de hashtag al eliminar una variable de cadena de consulta directamente antes de un hashtag
fuente
UpdateQueryString('a', null, 'http://www.test.com?a=b#c');
url
para cada iteración de reemplazo. Pero, eso significa que debe ingresar avalue
en los argumentos, lo que dejará la cadena de consulta a medio quitar. Para contrarrestar esto, useundefined
onull
paravalue
argumentos como:url_from_last_iteration = UpdateQueryString(current_ignore_key, undefined/null, url_from_last_iteration);
Suponiendo que desea eliminar el parámetro key = val del URI:
fuente
/([&?]key=val*$|key=val&|[?&]key=val(?=#))/
puede ser preferible cuando se usa un linter como eslintEsto es lo que estoy usando:
URL original: http://www.example.com/test/hello?id=123&foo=bar
URL de destino: http://www.example.com/test/hello
fuente
Heres una función completa para agregar y eliminar parámetros en función de esta pregunta y este github gist: https://gist.github.com/excalq/2961415
Puede agregar parámetros como este:
Y eliminarlo así:
En este hilo, muchos dijeron que la expresión regular probablemente no sea la mejor / solución estable ... así que no estoy 100% seguro de si esto tiene algunos defectos, pero hasta donde lo probé, funciona bastante bien.
fuente
Esta es una versión limpia que elimina el parámetro de consulta con la clase de URL para los navegadores actuales:
URLSearchParams no es compatible con navegadores antiguos
https://caniuse.com/#feat=urlsearchparams
IE, Edge (menos de 17) y Safari (menos de 10.3) no admiten URLSearchParams dentro de la clase de URL.
Polyfills
URLSearchParams solo polyfill
https://github.com/WebReflection/url-search-params
Complete Polyfill URL y URLSearchParams para que coincidan con las últimas especificaciones WHATWG
https://github.com/lifaon74/url-polyfill
fuente
Usando jQuery:
fuente
La versión anterior como una función
fuente
Debería usar una biblioteca para realizar la manipulación de URI, ya que es más complicado de lo que parece en la superficie hacerlo usted mismo. Echa un vistazo a: http://medialize.github.io/URI.js/
fuente
Por lo que puedo ver, ninguno de los anteriores puede manejar parámetros normales y parámetros de matriz. Aquí hay uno que sí.
Cómo usarlo:
Por supuesto, para actualizar un parámetro, simplemente elimine y luego agregue. Siéntase libre de hacer una función ficticia para ello.
fuente
path.replace(new RegExp("&?"+param+"=[\\w]+", "g"), "");
Cambiaría la expresión regular para[\\w]*
incluir parámetros como "param =" sin valores.Todas las respuestas en este hilo tienen una falla en el sentido de que no conservan partes ancladas / fragmentadas de las URL.
Entonces, si su URL se ve así:
y reemplazas 'parámetro'
perderás tu fragmento de texto.
La siguiente es la adaptación de respuestas anteriores (bobince a través de LukePH) que aborda este problema:
fuente
url = urlBase+'?'+pars.join('&');
aurl = urlBase + (pars.length > 0 ? '?' + pars.join('&') : "");
Aquí una solución que:
?
en la cadena de consulta si se eliminó el último parámetroNota: como se señaló en otras respuestas, URLSearchParams no es compatible con IE , por lo tanto, use un polyfill .
fuente
Si es una instancia de
URL
, use ladelete
función desearchParams
fuente
otra respuesta directa y más simple sería
fuente
Una versión modificada de la solución por ssh_imov
Llama asi
fuente
Esto devuelve la URL sin CUALQUIER parámetro de OBTENCIÓN:
fuente
Prácticamente escribí la siguiente función para procesar los parámetros de URL y obtener el estado final como una cadena y redirigir la página. Ojalá se beneficie.
Por ejemplo, cuando hago clic en un botón, quiero que se elimine el valor de la página y se agregue el valor de la categoría.
¡Creo que fue muy útil!
fuente
Me alegra que te hayas desplazado aquí.
Le sugiero que resuelva esta tarea con las siguientes soluciones posibles:
http://google.com/?myparm
http://google.com/?myparm=1
http://google.com?qp=1&qpqp=2&qp=1
for
bucle y no modifica la matriz durante el bucle sobre élFunciona en IE> 9 (versión ES5)
Fancy ES6 versión
Mira cómo funciona aquí
fuente
fuente
fuente
Si te gusta jQuery, hay un buen complemento de manipulación de cadenas de consulta:
fuente
fuente