190 votes

Supprimer une chaîne de requête à partir de l'URL

Ce est un moyen facile de supprimer la chaîne de requête à partir d'un Chemin d'accès en Javascript? J'ai vu un plugin pour Jquery qui utilise la fenêtre.emplacement.de recherche. Je ne peux pas le faire: L'URL dans mon cas, c'est une variable qui est définie à partir de l'AJAX.

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

415voto

Robusto Points 17430

Un moyen facile d'obtenir c'est:

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

Pour ceux qui souhaitent également supprimer le hachage (ne faisant pas partie de la question d'origine) lorsqu'aucune requête n'existe, ce qui nécessite un peu plus:

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

36voto

Daniel Vassallo Points 142049

2ème mise à Jour: Dans la tentative de fournir une réponse complète, je suis la comparaison des trois méthodes proposées dans les différentes réponses.

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');

Résultats dans Firefox 3.5.8 sur Mac OS X 10.6.2:

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

Résultats dans google Chrome 5.0.307.11 sur Mac OS X 10.6.2:

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

Notez que la méthode sous-chaîne est inférieure dans les fonctionnalités qu'il renvoie une chaîne vide si l'URL ne contient pas de chaîne de requête. Les deux autres méthodes serait de retour l'URL complète, comme prévu. Néanmoins, il est intéressant de noter que la sous-chaîne de la méthode la plus rapide, en particulier dans Firefox.


1ère mise à JOUR: en Fait la méthode split() suggéré par Robusto est une meilleure solution que celle que j'ai suggéré plus tôt, car il fonctionne même quand il n'y a pas de chaîne de requête:

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"

Réponse Originale À Cette Question:

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

3voto

karthik m Points 61

Un moyen simple est que vous pouvez faire comme suit

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

2voto

plodder Points 1307

Si vous êtes dans la RegEx....

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

-3voto

Boris Guéry Points 23606

Si vous devez effectuer une opération complexe sur l'URL, vous pouvez prendre un coup d'oeil à la jQuery url analyseur de plugin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X