Existe-t-il une méthode pour obtenir l'URL sans chaîne de requête?

268

J'ai une URL comme http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235.

Je veux obtenir l'URL sans la chaîne de requête: http://localhost/dms/mduserSecurity/UIL/index.php.

Existe-t-il une méthode pour cela en JavaScript? Actuellement, j'utilise document.location.href, mais il renvoie l'URL complète.

Saint
la source
2
doublon possible de Supprimer la chaîne de requête de l'URL
Alex Angas

Réponses:

348

Essaye ça: window.location.href.split('?')[0]

tradyblix
la source
12
@Lincoln - Pourquoi? Je ne vois aucune raison pour laquelle ce serait dangereux. Il est également conforme aux spécifications (à la fois les spécifications de ce que window.location.href doit retourner et les spécifications du fonctionnement de l'URL), il ne devrait donc pas avoir de problèmes futurs. Il est plus facile à lire et à comprendre pour un code plus propre. Il est plus court pour un code plus petit. Et enfin c'est moins intense et moins compliqué que la réponse de Félix. Je ne dis pas que Felix a tort, mais je dis que sans une sorte d'exemple spécifique d'échec / d'insécurité, cette réponse est supérieure à presque tous les égards.
Jimbo Jonny
1
vous devez utiliser window.location.pathname ..etc comme dans les autres réponses
Muayyad Alsadi
22
@JimboJonny @Marcel Ceci ne gère pas les identifiants de fragments (par exemple le #terme dans stackoverflow.com/questions/5817505#5817548 ). Vous devez utiliser l'expression régulière ou utiliser plusieurs fonctions .split (), auquel cas vous avez perdu la valeur d'être une réponse "simple" lors du nettoyage d'une URL. Certes, cela dépasse techniquement la portée de la question, mais je dirais que c'est toujours pertinent.
andrewb
2
Bien qu'il soit exact que cela ne gère pas les identificateurs de fragments, le demandeur n'a pas demandé d'URL complètement filtrée. Il a demandé spécifiquement une URL sans chaîne de requête, et cette réponse fournit exactement cela. La même URL, avec la chaîne de requête supprimée.
Drew Major
383

Lisez à propos Window.locationet l' Locationinterface:

var url = [location.protocol, '//', location.host, location.pathname].join('');
Felix Kling
la source
27
Ou si vous utilisez es6, vous pouvez utiliser un littéral de chaîne ${location.protocol}//${location.host}${location.pathname}
alexreardon
Notez bien que cela pathnamepeut laisser tomber le leader /(jusqu'à IE 11?) . Ah, IE, toujours un flocon de neige, n'est-ce pas?
ruffin
36
location.toString().replace(location.search, "")
Quentin
la source
12
C'est une réponse très sous-évaluée. C'est le seul qui répond exactement à la question. Option encore plus courte:location.href.replace(location.search, '')
Guido Bouman
2
Qu'en est-il d'une partie de fragment, par exemple domain.com/?x=1#top
Onur Topal
2
Il y a 10 réponses à cette question. Un seul d'entre eux conserve le hachage ( qui n'existe de toute façon pas sur l'URL que la question pose ). Pourquoi y a-t-il deux commentaires indiquant que cette réponse ne préserve pas le hachage inexistant mais pas les autres?
Quentin
14
var url = window.location.origin + window.location.pathname;
Jason
la source
5
rejeté parce que l'origine n'est pas prise en charge dans IE11 :-(
George
6
Pourquoi voudriez-vous voter contre quelque chose simplement parce qu'il ne fonctionne pas dans un navigateur particulier? Beaucoup d'endroits utilisent toujours IE10 comme standard en raison des applications qu'ils utilisent.
Brad
1
Fonctionne dans IE11.309.16299.0
Ryan Burbidge
10

Si vous souhaitez également supprimer le hachage, essayez celui-ci: window.location.href.split(/[?#]/)[0]

user1079877
la source
5

Essayer:

document.location.protocol + '//' +
document.location.host +
document.location.pathname;

(NB: .hostplutôt que .hostnamepour que le port soit inclus aussi, si nécessaire)

Alnitak
la source
4

il suffit de couper la chaîne en utilisant split (la manière la plus simple):

var myString = "http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235"
var mySplitResult = myString.split("?");
alert(mySplitResult[0]);
happyontbelong
la source
3

Pour obtenir chaque partie de l'URL à l'exception de la requête:

var url = (location.origin).concat(location.pathname).concat(location.hash);

Notez que cela inclut également le hachage, s'il y en a un (je sais qu'il n'y a pas de hachage dans votre exemple d'URL, mais j'ai inclus cet aspect pour être complet). Pour éliminer le hachage, excluez simplement .concat(location.hash).

Il est préférable d'utiliser concatpour joindre les chaînes Javascript ensemble (plutôt que +): dans certaines situations, cela évite les problèmes tels que la confusion de type.

Andrew Faulkner
la source
1

Utiliser les propriétés de window.location

var loc = window.location;
var withoutQuery = loc.hostname + loc.pathname;
var includingProtocol = loc.protocol + "//" + loc.hostname + loc.pathname;

Vous pouvez voir plus de propriétés sur https://developer.mozilla.org/en/DOM/window.location

detaylor
la source
1

Voici deux méthodes:

<script type="text/javascript">
    var s="http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu
                                =true&pcode=1235";

    var st=s.substring(0, s.indexOf("?"));

    alert(st);

    alert(s.replace(/\?.*/,''));
</script>
TheVillageIdiot
la source
1

Que dis-tu de ça: location.href.slice(0, - ((location.search + location.hash).length))

LI XiangChen
la source
0

Ajoutez simplement ces deux lignes à $ (document) .ready dans JS comme suit:

$(document).ready(function () {
 $("div.sidebar nav a").removeClass("active");
        $('nav a[href$="'+ window.location.pathname.split("?")[0] +'"]').addClass('active');
});

il vaut mieux utiliser le signe dollar ($) (Terminer par)

$('nav a[href$

au lieu de (^) (Commencez par)

$('nav a[href^

car, si vous utilisez le signe (^) et que vous avez des URL imbriquées dans le menu de navigation, (par exemple "/ account" et "/ account / roles")

Il les activera tous les deux.

i Smart Learning
la source
0

Si vous utilisez dot net core 3.1, il prend en charge la route ignorer la casse , donc la méthode précédente n'est pas utile si la déroute est en minuscules et que l'utilisateur écrit la déroute en majuscules.

Ainsi, le code suivant est très utile:

$(document).ready(function () {
    $("div.sidebar nav a").removeClass("active");
    var urlPath = window.location.pathname.split("?")[0];
    var nav = $('div.sidebar nav a').filter(function () {
        return $(this).attr('href').toLowerCase().indexOf(urlPath.toLocaleLowerCase()) > -1;
    });
    $(nav).each(function () {
        if ($(this).attr("href").toLowerCase() == urlPath.toLocaleLowerCase())
            $(this).addClass('active');
    });
});
i Smart Learning
la source