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

sai*_*int 250 javascript url

我有一个像这样的网址http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235.

我想没有查询字符串的网址:http://localhost/dms/mduserSecurity/UIL/index.php.

在JavaScript中有没有这方法?目前我正在使用document.location.href,但它返回完整的URL.

Fel*_*ing 368

阅读Window.locationLocation界面:

var url = [location.protocol, '//', location.host, location.pathname].join('');
Run Code Online (Sandbox Code Playgroud)

  • 或者如果使用es6,你可以使用字符串文字``$ {location.protocol} // $ {location.host} $ {location.pathname}`` (24认同)
  • 但请注意,“路径名”可能[删除前导的“/”(直到 IE 11?)](https://developer.mozilla.org/en-US/docs/Web/API/Location#Browser_compatibility)。啊,IE,总是雪花,不是吗? (2认同)

tra*_*lix 314

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

  • Felix Kling的回答是更安全/更正确的方法. (27认同)
  • @JimboJonny @Marcel这不处理片段标识符(例如http://stackoverflow.com/questions/5817505#5817548中的```术语).您必须使用正则表达式或使用多个.split()函数,此时您在清理URL时失去了这个"简单"答案的价值.当然,这在技术上超出了问题的范围,但我认为它仍然具有相关性. (21认同)
  • @Lincoln - 为什么?我认为没有理由认为这不安全.它也在规范内(有关window.location.href应该返回的规范以及URL工作方式的规范),因此它不应该有任何未来的问题.对于更干净的代码,它更容易阅读和理解.对于较小的代码,它更短.最后,它比菲利克斯的答案更不强烈,也不那么复杂.不是说菲利克斯错了,但是我说没有某种失败/不安全的具体例子,这个答案几乎在各方面都是优越的. (11认同)
  • 您应该像其他答案一样使用 window.location.pathname ..etc (3认同)
  • 虽然这不能处理片段标识符是准确的,但是提问者没有要求完全清理的URL.他特意要求一个没有查询字符串的网址,而这个答案正是如此.删除了查询字符串的相同URL. (2认同)

Que*_*tin 30

location.toString().replace(location.search, "")
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常低估的答案.这是唯一能够完全回答这个问题的人.更短的选项:`location.href.replace(location.search,'')` (9认同)
  • 什么是片段部分,例如domain.com/?x=1#top (2认同)
  • 这个问题有10个答案。其中只有一个保留哈希值(*问题仍然要询问的URL上不存在*)。为什么有两条评论指出该答案不会保留不存在的哈希,而不会保留其他任何一个? (2认同)

Jas*_*son 10

var url = window.location.origin + window.location.pathname;
Run Code Online (Sandbox Code Playgroud)

  • 由于IE11不支持原点,所以投票赞成:-( (5认同)
  • 为什么你只是因为它不能在特定的浏览器中工作而投票?由于他们使用的应用程序,很多地方仍然使用IE10作为标准. (5认同)
  • 这是2022年最好的答案。 (3认同)

s4y*_*s4y 10

这是使用URL() 接口的方法

new URL(location.pathname, location.href).href
Run Code Online (Sandbox Code Playgroud)


use*_*877 8

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


ple*_*ong 5

只需使用 split 来切割字符串(简单的方法):

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


Aln*_*tak 5

尝试:

document.location.protocol + '//' +
document.location.host +
document.location.pathname;
Run Code Online (Sandbox Code Playgroud)

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


And*_*ner 5

要获取除查询之外的 URL 的每个部分:

var url = (location.origin).concat(location.pathname).concat(location.hash);
Run Code Online (Sandbox Code Playgroud)

请注意,这也包括散列,如果有的话(我知道您的示例 URL 中没有散列,但为了完整起见,我包含了该方面)。要消除散列,只需 exclude .concat(location.hash)

使用concat将 Javascript 字符串连接在一起(而不是+)是更好的做法:在某些情况下,它可以避免诸如类型混淆之类的问题。