【问题标题】:How to get the URL without any parameters in JavaScript?如何在 JavaScript 中获取不带任何参数的 URL?
【发布时间】:2011-09-09 14:11:09
【问题描述】:

如果我使用:

alert(window.location.href);

我得到了包括查询字符串在内的所有内容。有没有办法只获取主 url 部分,例如:

http://mysite.com/somedir/somefile/

而不是

http://mysite.com/somedir/somefile/?foo=bar&loo=goo

【问题讨论】:

标签: javascript


【解决方案1】:

我迟到了,但我最近不得不解决这个问题,我想我会分享财富。

const url = window.location.origin + window.location.pathname
//http://example.com/somedir/somefile/

window.location.origin 将为您提供基本 url,在我们的测试用例中:http://example.com

window.location.pathname 将为您提供路由路径(在基本 url 之后),在我们的测试用例 /somedir/somefile

解决方案 2

您可以简单地执行以下操作来摆脱查询参数。

const url = window.location.href.split('?')[0]

【讨论】:

    【解决方案2】:

    使用 URL 的另一种选择

    var theUrl = new URL(window.location.href);
    theUrl.search = ""; //Remove any params
    theUrl //as URL object
    theUrl.href //as a string
    

    【讨论】:

      【解决方案3】:

      您可以连接originpathname,如果存在example.com:80 之类的端口,也会包含在内。

      location.origin + location.pathname
      

      【讨论】:

      • 此解决方案不适用于 Microsoft Internet Explorer developer.mozilla.org/en-US/docs/Web/API/Location/origin
      【解决方案4】:

      每个答案都相当复杂。这里:

      var url = window.location.href.split('?')[0];
      

      即使 ?不存在,它仍然会返回第一个参数,这将是您的完整 URL,减去查询字符串。

      它也与协议无关,这意味着您甚至可以将它用于诸如 ftp、itunes.etc 之类的东西。

      【讨论】:

      • 如果您需要移除锚点window.location.href.split(/[?#]/)[0];
      • 确实每个的答案都相当复杂
      • @mehmet 如果您有更简单的方法,请全神贯注:)
      • @Oddman,我完全不记得我当时在想什么,但我想这可能是一个肯定的陈述:))
      • @Vishal--JAVA--CQ“更好”是主观的,但更简单。
      【解决方案5】:

      您可以使用正则表达式:window.location.href.match(/^[^\#\?]+/)[0]

      【讨论】:

        【解决方案6】:

        如果您查看the documentation,您可以只从window 对象中获取您感兴趣的属性,即

        protocol + '//' + hostname + pathname
        

        【讨论】:

        • 您的建议丢失了端口号,以我的拙见,lonesomeday 的解决方案更好。
        【解决方案7】:

        使用indexOf

        var url = "http://mysite.com/somedir/somefile/?aa";
        
        if (url.indexOf("?")>-1){
        url = url.substr(0,url.indexOf("?"));
        }
        

        【讨论】:

        • 它不会删除 #.
        【解决方案8】:
        var url = "tp://mysite.com/somedir/somefile/?foo=bar&loo=goo"    
        
        url.substring(0,url.indexOf("?"));
        

        【讨论】:

        • 这里假定,该参数已定义。更好的是url.split('?')[0]
        【解决方案9】:

        这是可能的,但您必须从 location object 手动构建它:

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

        【讨论】:

        • 请注意,您不需要提供 location.protocol,因为所有现代浏览器(包括 IE6)都会自动继承当前协议。即:'//' + location.host + location.pathname
        • @JonnyReeves 如果您在当前文档中使用它,那是真的:好点。在某些情况下可能有必要,例如如果将 URL 输出为纯文本。
        • @lonesomeday 您的回复暗示这是唯一的方法,但事实并非如此。
        • 缺少端口,所以这将返回页面http://www.example.com:8080/asdf.html?foo=bar的错误结果
        • 您可以使用location.origin 保存一些字符,我相信这也解决了@izogfif 的担忧。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-12
        • 1970-01-01
        • 2016-11-20
        • 1970-01-01
        • 1970-01-01
        • 2020-12-15
        相关资源
        最近更新 更多