Чи є спосіб отримати URL-адресу без рядка запиту?


267

У мене є така URL-адреса http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235.

Я хочу , щоб отримати URL без рядка запиту: http://localhost/dms/mduserSecurity/UIL/index.php.

Чи існує якийсь метод для цього в JavaScript? Наразі я використовую document.location.href, але він повертає повну URL-адресу.


2
можливий дублікат Remove querystring from URL
Alex Angas

Відповіді:


348

Спробуйте це: window.location.href.split('?')[0]


12
@Lincoln - Чому? Я не бачу причин, щоб це було небезпечно. Він також знаходиться в специфікаціях (як специфікації для того, що window.location.href повинен повернутися, так і в специфікації про те, як працює URL), тому у нього не повинно виникнути проблем у майбутньому. Це легше читати та розуміти для чистішого коду. Він менший за менший код. І нарешті, це менш інтенсивно і менш складно, ніж відповідь Фелікса. Не кажу, що Фелікс помиляється, але я кажу, що без якогось конкретного прикладу невдачі / невпевненості ця відповідь майже в усьому перевершує.
Jimbo Jonny

1
ви повинні використовувати window.location.pathname ..etc, як і в інших відповідях
Muayyad Alsadi

22
@JimboJonny @Marcel Це не обробляє ідентифікаторів фрагментів (наприклад, #термін у stackoverflow.com/questions/5817505#5817548 ). Вам потрібно буде використовувати регулярний вираз або використовувати кілька функцій .split (), і тоді ви очистили URL-адресу, втративши значення цього "простого" відповіді. Зрозуміло, це технічно виходить за рамки питання, але я б сказав, що це все ще актуально.
andrewb

2
Незважаючи на те, що це не обробляє ідентифікатори фрагментів, запитувач не запитував повністю санізовану URL-адресу. Він спеціально запитав URL-адресу без рядка запиту, і ця відповідь дає саме це. Ця сама URL-адреса, вилучена рядок запиту.
Дрю майор

383

Читайте про Window.locationта Locationінтерфейс:

var url = [location.protocol, '//', location.host, location.pathname].join('');

27
Або якщо ви використовуєте es6, ви можете скористатися рядковим ${location.protocol}//${location.host}${location.pathname}
літералом

Хоча зауважте, що pathnameможе впасти провідна /(до IE 11?) . Ах, IE, завжди сніжинка, чи не так?
ruffin

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

11
Це дуже занижена відповідь. Це єдиний, хто точно відповідає на питання. Ще коротший варіант:location.href.replace(location.search, '')
Guido Bouman

2
про те, що є частина фрагмента, наприклад domain.com/?x=1#top
Onur Topal

2
На це запитання є 10 відповідей. Лише один із них зберігає хеш ( якого немає в URL-адресі, про яку так чи інакше задають питання ). Чому два коментарі вказують на те, що ця відповідь не зберігає неіснуючий хеш, але не будь-який з інших?
Квентін

13
var url = window.location.origin + window.location.pathname;

5
знищений голос, оскільки походження не підтримується в IE11 :-(
Джордж

6
Чому б ви проголосували щось лише тому, що воно не працює в конкретному браузері? Дуже багато місць все ще використовують IE10 в якості стандарту через програми, які вони використовують.
Бред

1
Працює в IE11.309.16299.0
Райан Бербідж

10

Якщо ви також хочете видалити хеш, спробуйте цей: window.location.href.split(/[?#]/)[0]


5

Спробуйте:

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

(Примітка: .hostзамість того, .hostnameщоб порт також був включений, якщо потрібно)



4

просто виріжте рядок, використовуючи спліт (простий спосіб):

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

3

Щоб отримати кожну частину URL-адреси, крім запиту:

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

Зауважте, що сюди входить і хеш, якщо він є (я знаю, що у вашому прикладі URL немає хешу, але я включив цей аспект для повноти). Щоб усунути хеш, просто виключіть.concat(location.hash) .

Краще використовувати concatдля об'єднання рядків Javascript разом (а не +): у деяких ситуаціях це дозволяє уникнути проблем, таких як плутанина типу.



1

Ось два способи:

<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>


0

Просто додайте ці два рядки до $ (document). Вже в JS так:

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

краще використовувати знак долара ($) (Закінчити з)

$('nav a[href$

замість (^) (Почніть з)

$('nav a[href^

тому що, якщо ви використовуєте знак (^) і вклали URL-адреси в навігаційне меню (наприклад, "/ рахунок" та "/ рахунок / ролі")

Він буде активним обом.


0

Якщо ви використовуєте краткове ядро ​​3.1, воно підтримує ігнорування випадків маршрут , тому попередній спосіб не корисний, якщо маршрутизація є малими літерами, а користувач записує маршрут великими літерами.

Отже, наступний код дуже корисний:

$(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');
    });
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.