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.


Réponses:


348

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


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


36
location.toString().replace(location.search, "")

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;

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]


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)



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

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.



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>

1

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


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.


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');
    });
});
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.