有没有没有查询字符串的方法来获取URL?


267

我有一个类似的网址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。


Answers:


348

试试这个: window.location.href.split('?')[0]


12
@林肯-为什么?我认为这是不安全的。它也在规范之内(有关应返回哪种window.location.href的规范以及有关URL的工作原理的规范),因此它将来不会有任何问题。对于更清晰的代码,它更易于阅读和理解。对于较小的代码,它更短。最后,它没有费利克斯的回答那么激烈,也没有那么复杂。并不是说Felix是错的,而是说如果没有某种特定的失败/不安全示例,那么这个答案几乎在所有方面都是上乘的。
Jimbo Jonny 2012年

1
您应该像其他答案一样使用window.location.pathname
..etc

22
@JimboJonny @Marcel这不处理片段标识符(例如stackoverflow.com/questions/5817505#5817548中#术语)。您必须使用正则表达式或使用多个.split()函数,这时您已经失去了清理URL时“简单”答案的价值。当然,从技术上讲,这超出了问题的范围,但是我认为这仍然有意义。
andrewb

2
尽管不处理片段标识符是很准确的,但请求者没有要求使用完全清除的URL。他专门询问了没有查询字符串的URL,而这个答案恰好可以实现这一点。相同的URL,但删除了查询字符串。
提请少校


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中工作
Ryan Burbidge

10

如果您还想删除哈希,请尝试以下一种方法: window.location.href.split(/[?#]/)[0]


5

尝试:

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

(注意:.host不是.hostname这样端口被列入过,如果需要的话)



4

只需使用split剪切字符串即可(简单方法):

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>

1

这个怎么样: location.href.slice(0, - ((location.search + location.hash).length))


0

只需将这两行添加到JS中的$(document).ready中,如下所示:

$(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(例如“ / account”和“ / account / roles”),

它将激活他们两个。


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');
    });
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.