题 在JavaScript中获取当前网址?


我正在使用jQuery。如何获取当前URL的路径并将其分配给变量?

示例网址:

http://localhost/menuname.de?foo=bar&number=0

1584
2018-01-02 06:42


起源


你也可以看到 tech-blog.maddyzone.com/javascript/... - Rituraj ratan
我认为问题应该恢复到要求jQuery,因为有一个答案,无论是否需要jQuery来完成任务。 - goodeye
可能重复 使用JavaScript获取当前网址? - vimal1083
@goodeye不,没有jQuery方法来获取位置;从jQuery bug跟踪器开始:»它可能有效,但从未支持或记录过。只需使用更快,更简单,更易于理解的document.location.href。«换句话说,有些人使用jQuery来获取位置,但他们依赖的是bug,而不是功能。看到: bugs.jquery.com/ticket/7858 - feeela


答案:


要获取路径,您可以使用:

var pathname = window.location.pathname; // Returns path only
var url      = window.location.href;     // Returns full URL

2134
2018-01-02 06:57



位置对象的属性: developer.mozilla.org/en/DOM/window.location - bentford
jQuery给Javascript带来了新的生命,而不是杀死它。新的C#/ Java程序员是否理解指针?不,他们需要吗?不是真的,更新的抽象是足够强大的,因为它无关紧要.. - flesh
“我如何在jQuery中使用XYZ”,答案是普通的javascript非常常见。你可能知道如何用普通的javascript做某事;但是,由于浏览器不一致,您可能更喜欢以“jQuery”方式进行操作。我记得pre-jQuery或框架我会首先检查浏览器,然后做我想要的一些方法。所以jQuery杀死普通的js ...是的,感谢上帝,但它也使它可用。 - Parris
这不适用于完整的网址。例如。为“mail.google.com/mail/u/0/#mbox/13005b79fe72f448";这只会返回/ mail / u / 0 - dwaynemac
嗯,... window.location.pathname只获取URL“?”并且不会像问题中那样得到查询参数。 - johntrepreneur


在纯jQuery风格:

$(location).attr('href');

location对象还具有其他属性,如host,hash,protocol和pathname。


778
2018-05-19 12:42



显然,在jQuery中使用$(location)是不受支持的,并建议不要: bugs.jquery.com/ticket/7858 - Peter
@Peter Bug因无效而关闭。 - mc10
@ mc10:“无效”部分适用于支持$(位置)的请求;不应该使用它。 - Peter
不需要这个答案,可以更新问题和答案以不使用jquery。原因可以在这里找到 bugs.jquery.com/ticket/7858#comment:4 - Vishwanath
@HaralanDobrev:你不应该这样做 .attr() 在位置。 (1)它不是一个元素,所以 $(location) 最好是阴暗的,(2)即使它有效,你应该使用 .prop() 获得财产。 .attr() 用于HTML属性。 - cHao


http://www.refulz.com:8082/index.php#tab2?foo=789

Property    Result
------------------------------------------
host        www.refulz.com:8082
hostname    www.refulz.com
port        8082
protocol    http:
pathname    index.php
href        http://www.refulz.com:8082/index.php#tab2
hash        #tab2
search      ?foo=789

var x = $(location).attr('<property>');

这只有在你有jQuery的情况下才有效。例如:

<html>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js">
</script>
  $(location).attr('href');      // http://www.refulz.com:8082/index.php#tab2
  $(location).attr('pathname');  // index.php
</script>
</html>

431
2018-01-30 21:10



它与之前的解释相同,但与对象的所有元素相同。很好的答案。 - Oskar Calvo
应该 /index.php 代替 index.php 为路径名。 - Andrea
+1 jQuery是有史以来最优质的代码,如果你不使用它是你的白痴。 jQuery绝对是最佳选择。 </讽刺> - Oriol
我个人认为这是最好的答案。当然Javascript尽力而为,但jQuery更好地解决了更多边缘情况,这就是为什么jQuery今天仍然如此受欢迎,它更好地找出了不兼容性。假设,明年一些新的浏览器没有正确使用window.location,在这种情况下我的钱将用于jQuery。是的,Javascript自1994年以来有所改进,但现在你拥有智能手机,平板电脑,如此多的浏览器,更多边缘案例。听到新开发人员称jQuery为“旧方式”,然后他们的纯粹Javascript代码在移动浏览器中中断,这很有趣。 - PJ Brunet
根据 bugs.jquery.com/ticket/7858 这只是偶然的。也, attr 应该只用于DOM对象,可以使用HTML属性设置。 - MauganRa


如果您需要URL中存在的哈希参数, window.location.href 可能是一个更好的选择。

window.location.pathname
=> /search

window.location.href 
 => www.website.com/search#race_type=1

57
2018-05-09 16:39



如果有人只需要哈希标记,则可以调用window.location.href - Amit Patel
我认为@AmitPatel意味着 window.location.hash - ptim


你会想要使用JavaScript的内置功能 window.location 目的。


45
2018-01-02 06:50



这不会在“?”后返回项目在位置。 - Majid
@majidgeek在Firefox,Chrome和IE中为我工作。你能提供一个这种破坏的测试案例吗? - Barney
至少可以在控制台中确认一下 window.location.pathname 之后没有检索任何东西 ? - worc


只需在JavaScript中添加此函数,它将返回当前路径的绝对路径。

function getAbsolutePath() {
    var loc = window.location;
    var pathName = loc.pathname.substring(0, loc.pathname.lastIndexOf('/') + 1);
    return loc.href.substring(0, loc.href.length - ((loc.pathname + loc.search + loc.hash).length - pathName.length));
}

我希望这个对你有用。


36
2018-05-19 09:12



这对于我懒得拥有一些硬编码基本URL的脚本非常有用。我不希望在根上有尾随'/'并将其插入路径中,所以我只是做了第二行 var pathName = loc.pathname.substring(0, loc.pathname.lastIndexOf('/')); - cogdog


window.location是javascript中的一个对象。它返回以下数据

window.location.host          #returns host
window.location.hostname      #returns hostname
window.location.path          #return path
window.location.href          #returns full current url
window.location.port          #returns the port
window.location.protocol      #returns the protocol

在jquery你可以使用

$(location).attr('host');        #returns host
$(location).attr('hostname');    #returns hostname
$(location).attr('path');        #returns path
$(location).attr('href');        #returns href
$(location).attr('port');        #returns port
$(location).attr('protocol');    #returns protocol

29
2018-04-06 09:54



虽然windows.location很有趣,但它应该是window.location。 - some-non-descript-user


这是一个比许多人想象的更复杂的问题。一些浏览器支持内置的JavaScript位置对象和可通过的相关参数/方法 window.location 要么 document.location。但是,不同风格的Internet Explorer(6,7)不支持这些方法,(window.location.hrefwindow.location.replace() 不支持)所以你必须通过不断编写条件代码来手持Internet Explorer来以不同的方式访问它们。

所以,如果你有jQuery可用和加载,你也可以使用jQuery(location),因为它解决了这些问题。但是,如果你正在做一个例子 - 通过JavaScript进行一些客户端地理定位重定向(即使用Google Maps API和位置对象方法),那么你可能不想加载整个jQuery库并编写你的条件代码检查Internet Explorer / Firefox /等的每个版本。

Internet Explorer让前端编码猫不高兴,但jQuery是一盘牛奶。


25
2018-01-12 20:12



Additionaly: bugs.jquery.com/ticket/8138。在jQuery 1.8.0源代码中有注释://#8138,如果设置了document.domain,IE可能会在从window.location访问//字段时抛出异常。 - Jan Święcki