获取URL路径但不包括最后一段

15

如何获取当前网站的URL路径,但不包括最后一段:

http://www.domain.com/first/second/last

我只需要使用jQuery(或仅JavaScript)获取http://www.domain.com/first/second ...


2
var firstpart = url.substring(0,url.lastIndexOf("/")) - mplungjan
1
@mplungjan:请将您的评论添加为答案,这个可行! - albuvee
1
可能是URL的最后一段的重复问题。 - Basilevs
4个回答

21

使用pop和URL API

假设URL不太可能改变

我使用document.URL,因为这是推荐的方法。

const url = new URL("https://www.example.com/first/second/last"); // new URL(document.URL)
let path = url.pathname.split("/");
path.pop(); // remove the last
url.pathname = path.join("/")
console.log(url)

旧回答:按照OP的要求-带有评论中的更改

const url = "http://www.example.com/first/second/last", // document.URL, 
    shortUrl=url.substring(0,url.lastIndexOf("/"));
console.log(shortUrl)    

这里有一个替代方案

const url = new URL("http://www.example.com/first/second/last"),
      shortUrl = `${url.protocol}//${url.hostname}${url.pathname.slice(0,url.pathname.lastIndexOf("/"))}`

console.log(shortUrl)


可以使用以下代码:var url = document.location.href, shortURL = url.substring(0,url.lastIndexOf("/")); - albuvee
1
但是document.location.href已经被弃用,因此我使用document.URL。 - mplungjan

8
尝试以下代码,适用于所有浏览器:

http://jsfiddle.net/KZsEW

var url = "http://www.domain.com/first/second/last";  // or var url = document.URL;
var subUrl = url.substring(0,url.lastIndexOf("/"))

alert(subUrl);
​
lastIndexOf() 方法返回一个字符串中指定值最后出现的位置。
注意:该方法从字符串末尾开始向前搜索,但是返回从头开始的索引,即位置0。
如果未找到要搜索的值,则该方法返回-1。
参考链接:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/lastIndexOf

1
你正在对字符串使用lastIndexOf,而不是数组,因此无需修改数组原型。 - nxt
抱歉!我删除了以防止更多的混淆,因为我自己也很困惑。 - Dennis Martinez
非常棒的答案,因为它本质上是一个可以在array.map()中使用的一行代码。 - Jerther

0

我不确定这是最优雅的解决方案,但你只需要子字符串到最后一个斜杠,如果最后一个字符是斜杠,则为倒数第二个。在这里,我首先获取出现在协议(http://或https://)之后的URL部分,以便例如http://stackoverflow.com返回http://stackoverflow.com

    var url = document.URL.split('://');
    var last_slash;
    var result;
    if (url[1].charAt(url[1].length - 1) === '/') {
      url[1] = url[1].substring(0, url[1].length - 1);
    }
    last_slash = url[1].lastIndexOf('/');
    result = url[0] + '://' + ((last_slash !== -1) ? url[1].substring(0, last_slash) : url[1]);

编辑:jsfiddle http://jsfiddle.net/CV6d4/


1
你已经在使用split了,那为什么不用'/'来分割字符串,而不是用'://',然后从数组中弹出最后一个项目并重新连接它们。http://jsfiddle.net/8chxf/ - nxt
你需要进行微调以获取边缘情况,例如如果在你的解决方案中在URL末尾添加“/”则无法正常工作,而且它也无法在“http://www.domain.com”上工作。 - Emily
document.location已过时,请使用window.location.href。 - mplungjan
好的,说得也有道理。更加健壮的解决方案可能值得额外的代码。 - nxt
谢谢@mplungjan,我不知道document.location已经被弃用了--好知道! - Emily

0

试试这个:

var url = 'http://www.domain.com/first/second/last';
for(var i=url.length-1; i>=0;i--){
    if(url[i]!='/'){
        url= url.substr(0,i);
    }
    else{
        alert(url);
        break;
    }
}

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