如何在 JavaScript 中获取当前 URL 的目录部分?

Posted

技术标签:

【中文标题】如何在 JavaScript 中获取当前 URL 的目录部分?【英文标题】:How to get the directory part of current URL in JavaScript? 【发布时间】:2013-06-03 19:26:57 【问题描述】:

我正在尝试在网页顶部添加一个“返回目录”按钮,该按钮会将用户重定向到相同的 URL,但其中没有文件名。

例如,在查看 URL 时单击该按钮

http://example.com/somedir/button.html

会将您重定向到

http://example.com/somedir/

所以我创建了以下代码:

<html>
<body>

<input type="button"
value="back to dir"
onclick="top.location=document.URL.replace(/[^\\]*$/, '')">

</body>
</html>

但我缺少正确的代码,这会从 document.URL 中的当前 URL 中删除文件名

请问这里有人有什么好主意吗?

这里是 JSFiddle 链接:http://jsfiddle.net/afarber/PERBY/

而且我不想这一次使用 jQuery。

【问题讨论】:

【参考方案1】:

console.log(new URL(document.URL));

你会得到这样的所有对象:


  href:"https://yy.xx.id/index.php/5351/user/private/images%20%282%29.jpeg?forcedownload=1",

  origin:"https://smi.kerjaindonesia.id", 
  protocol: "https:", 
  username: "", 
  password: "", 
  pathname: "index.php/5351/user/private/images%20%282%29.jpeg"  ,
  port: "" ,
  protocol: "https:",
  search: "?forcedownload=1"

【讨论】:

【参考方案2】:

以下获取目录,包括最后一个字符为斜杠的情况。

document.URL.replace(/\/[^/]+\/?$/, '');

这有效地说明了以下内容(假设可以按此顺序找到它们)

    \/:找一个“/” [^/]+:在它后面找到一个或多个不是“/”的字符 \/?:在这些字符之后找到一个可选的“/” $: 找到字符串的结尾

然后通过'' 删除这些,所以我们只剩下目录了。

同样,这假设 存在一个斜线来标记目录,并且这不仅仅是一个 URL,其中唯一的斜线位于 http:// 内。

【讨论】:

我修改了这个以保留任何带有斜杠的路径组件(因此已经是目录的 URL 保持不变):window.location.href.replace(/\/[^/]+$/, '/')【参考方案3】:

这种单线也适用:

document.URL.split('/').slice(0, -1).join('/')

【讨论】:

虽然这种方法有效,但它比@abdul-rauf 发布的字符串解决方案慢得多【参考方案4】:

试试这个document.URL.substr(0,document.URL.lastIndexOf('/'))

它肯定会起作用!

【讨论】:

谢谢,这看起来不错 - 事件比我的正则表达式更好(我打错了...) 不客气,如果效果好就给个赞,让其他人受益。 如果当前 url 以斜杠结尾,这不起作用,因为它经常这样做。【参考方案5】:

尝试以下方法,这会同时考虑 URL 以斜杠结尾和不以斜杠结尾的情况:

var currUrl = document.URL,
    newUrl;
if (currUrl.charAt(currUrl.length - 1) === '/') 
    newUrl = currUrl.slice(0, currUrl.lastIndexOf('/'));
    newUrl = newUrl.slice(0, newUrl.lastIndexOf('/')) + '/';
 else 
    newUrl = currUrl.slice(0, currUrl.lastIndexOf('/')) + '/';

console.log(newUrl);

【讨论】:

【参考方案6】:
/* to avoid query parameters, use pathname instead of href */
var l = document.location.pathname.split('/');
l.pop();
console.log(document.location.origin + l.join('/'));

【讨论】:

仅供参考:document.location 已弃用,请改用 window.location

以上是关于如何在 JavaScript 中获取当前 URL 的目录部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 php 或 javascript 获取所有浏览器中当前打开的选项卡的 url?

前端使用js如何准确获取当前页面url网址信息

使用 JavaScript 获取当前 URL?

使用 JavaScript 获取当前 URL?

使用 JavaScript 获取当前 URL?

使用 JavaScript 获取当前 URL?