从路径中提取URL目录,不包括文件名,例如“index.html”。

12

1
你确定不能只依赖相对路径吗?指向“other.html”的链接将指向“index.html”所在的同一目录。 - Phylogenesis
我需要绝对路径,因为我需要将其作为重定向URL(实际上是用于Dropbox API)传递给服务器。 - Thomas Tempelmann
5
那么简单的解决方案就是 location.href.replace(/[^/]*$/, ''); - Phylogenesis
啊,谢谢。我在想是否应该再次删除这个问题,因为它似乎相当简单。我只是一个 JS 的初学者。 - Thomas Tempelmann
1
根据您的需要,您可能会发现URL.js很有用。 - Xotic750
显示剩余2条评论
4个回答

19

看起来这个就是解决方法:

var href = window.location.href;
var dir = href.substring(0, href.lastIndexOf('/')) + "/";

这是一种安全的方法吗?对于更复杂的URL,它是否会失败?


1
我在想,URL链接是否允许在查询参数(问号后面)中使用“/”符号?那么它们不是必须要编码吗? - Thomas Tempelmann
2
localhost/client/build是怎么样的?它会变成localhost/client,这可能不是您想要的。 - charlag

3

以下是帮助我解决问题的评论:

Phylogenesis的评论

简单的解决方案是location.href.replace(/[^/]*$/, '');。


1
对于那些想知道这段代码的作用的人:它会找到最后一个斜杠后面的所有内容,并将其删除,以便只保留最后一个斜杠之前和包括它在内的文本。 - Thomas Tempelmann

2

还有一个值得考虑的选项,它的好处是任何查询字符串都不会成为问题,因为window.location.pathname不会获取查询字符串。

window.location.origin + window.location.pathname.slice(0, window.location.pathname.lastIndexOf('/'))

0
更好的解决方案是:
location.href.replace(/\/[^\/]+?\.[^\/]+?$/, '/')

1
你应该添加代码将要执行的解释。 - Rudra
在测试时(请参见此处:https://regex101.com/r/X20kAO/1/),它所做的与所要求的不同:它似乎将“http://localhost/myapp/index.html”转换为“http:/”。 - Thomas Tempelmann
是的,抱歉,更新后的版本应该可以工作了。 - user14459251

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接