without querystring query parameter javascript jquery

javascript - parameter - Eliminar querystring de URL



javascript replace query string value (8)

Esta puede ser una vieja pregunta, pero he intentado este método para eliminar los parámetros de consulta. Parece que funciona bien para mí, ya que necesitaba una recarga combinada con la eliminación de parámetros de consulta.

window.location.href = window.location.origin + window.location.pathname;

Además, dado que estoy usando operaciones simples de suma de cadenas, supongo que el rendimiento será bueno. Pero aún vale la pena comparar con fragmentos en esta respuesta

¿Cuál es una manera fácil de eliminar la cadena de consulta de una ruta en Javascript? He visto un complemento para Jquery que usa window.location.search. No puedo hacer eso: la URL en mi caso es una variable que está configurada desde AJAX.

var testURL = ''/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3&SortOrder=dsc''



Si te gusta RegEx ...

var newURL = testURL.match(new RegExp("[^?]+"))


Si utiliza backbone.js (que contiene url anchor como ruta), puede aparecer la query string url:

  1. antes del url anchor :

    var url = ''http://example.com?a=1&b=3#routepath/subpath'';

  2. después de url anchor :

    var url = ''http://example.com#routepath/subpath?a=1&b=3'';

Solución:

window.location.href.replace(window.location.search, ''''); // run as: ''http://example.com#routepath/subpath?a=1&b=3''.replace(''?a=1&b=3'', '''');


Una forma simple es que puedes hacer lo siguiente

public static String stripQueryStringAndHashFromPath(String uri) { return uri.replaceAll(("(//?.*|//#.*)"), ""); }


Una manera fácil de obtener esto es:

function getPathFromUrl(url) { return url.split("?")[0]; }

Para aquellos que también desean eliminar el hash (que no forma parte de la pregunta original) cuando no existe una cadena de consulta , eso requiere un poco más:

function stripQueryStringAndHashFromPath(url) { return url.split("?")[0].split("#")[0]; }

EDITAR

@caub (originalmente @crl) sugirió un combo más simple que funciona tanto para la cadena de consulta como para el hash (aunque usa RegExp, en caso de que alguien tenga un problema con eso):

function getPathFromUrl(url) { return url.split(/[?#]/)[0]; }


2da actualización: en un intento de proporcionar una respuesta integral, estoy evaluando los tres métodos propuestos en las diversas respuestas.

var testURL = ''/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3''; var i; // Testing the substring method i = 0; console.time(''10k substring''); while (i < 10000) { testURL.substring(0, testURL.indexOf(''?'')); i++; } console.timeEnd(''10k substring''); // Testing the split method i = 0; console.time(''10k split''); while (i < 10000) { testURL.split(''?'')[0]; i++; } console.timeEnd(''10k split''); // Testing the RegEx method i = 0; var re = new RegExp("[^?]+"); console.time(''10k regex''); while (i < 10000) { testURL.match(re)[0]; i++; } console.timeEnd(''10k regex'');

Resultados en Firefox 3.5.8 en Mac OS X 10.6.2:

10k substring: 16ms 10k split: 25ms 10k regex: 44ms

Resultados en Chrome 5.0.307.11 en Mac OS X 10.6.2:

10k substring: 14ms 10k split: 20ms 10k regex: 15ms

Tenga en cuenta que el método de subcadena es inferior en funcionalidad, ya que devuelve una cadena en blanco si la URL no contiene una cadena de consulta. Los otros dos métodos devolverían la URL completa, como se esperaba. Sin embargo, es interesante observar que el método de subcadena es el más rápido, especialmente en Firefox.

1st UPDATE: En realidad, el método split () sugerido por Robusto es una mejor solución que la que sugerí antes, ya que funcionará incluso cuando no haya una cadena de consulta:

var testURL = ''/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3''; testURL.split(''?'')[0]; // Returns: "/Products/List" var testURL2 = ''/Products/List''; testURL2.split(''?'')[0]; // Returns: "/Products/List"

Respuesta Original:

var testURL = ''/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3''; testURL.substring(0, testURL.indexOf(''?'')); // Returns: "/Products/List"


var path = "path/to/myfile.png?foo=bar#hash"; console.log( path.replace(/(/?.*)|(#.*)/g, "") );