Estoy creando una función para eliminar más de 1 parámetro sin recargar con replaceState. He creado una función a continuación, y esta función funciona pero solo para 1 parámetro.
Si en otra página tengo más de 1 parámetro que quiero eliminar, ¿cómo lo hago? Quiero que esta funcionalidad funcione para todas las páginas. ¿Alguien puede ayudarme?
function removeURLParameter(url, parameter) { var urlparts = url.split('?'); if (urlparts.length >= 2) { var prefix = encodeURIComponent(parameter) + '='; var pars = urlparts[1].split(/[&;]/g); for (var i = pars.length; i-- > 0;) { if (pars[i].lastIndexOf(prefix, 0) !== -1) { pars.splice(i, 1); } } return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : ''); } return url; } $(document).ready(function(){ const url = "http://localhost:8088/products/10?param1=key1¶m2=key2¶m3=key3¶m4=key4" const removeURLParams = removeURLParameter( url, 'param3') console.log(url) console.log(removeURLParams) }) <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>Aquí hay un enfoque mucho más simple:
Puede usar parámetros de descanso para permitir que su función acepte múltiples parámetros.
Para eliminar los parámetros, primero puede analizar la URL con el URL de URL y luego obtener su propiedad searchParams . Luego, recorra cada parámetro y use URLSearchParams.delete para eliminar el parámetro.
function removeURLParameters(url, ...parameters) { const parsed = new URL(url); parameters.forEach(e => parsed.searchParams.delete(e)) return parsed.toString() } const url = "http://localhost:8088/products/10?param1=key1¶m2=key2¶m3=key3¶m4=key4" const res = removeURLParameters(url, 'param1', 'param3') console.log(res)