如何在Javascript中获取HTML页面的名称?

80

我有一个HTML页面,我想通过Javascript在页面内获取HTML文档的名称。这是否可能?

例如,HTML的名称为document = "indexOLD.html"


3
当前页面的 URL 路径名。 - user1937198
2
可能是重复的问题:从地址栏获取页面文件名 - j08691
11个回答

171
var path = window.location.pathname;
var page = path.split("/").pop();
console.log( page );

2
如果URL末尾有斜杠(在路由伪装实际文件名的情况下),这将无法正常工作。 - Damon
6
如果那对你是个问题,@Damon,这是另一个用例,请添加page.split('#').shift();来解决。 - Daniel Aranda
1
我更喜欢这种方法,因为它返回一个字符串,而不是像在下面的方法使用.slice(-1)返回一个数组。 - elbowlobstercowstand
1
为什么不直接使用document.URL.split('/').pop()呢? - Fai Ng
如果您要使用接口而不是简单地使用位置对象,那么最好使用文档对象而不是窗口对象。因为如果您只想读取文档中的位置接口,则它是只读的。 - Kalamarico

35

当前页面: 即使更短也是可行的。这一行更优雅,可以找到当前页面的文件名:

var fileName = location.href.split("/").slice(-1); 

or...

var fileName = location.pathname.split("/").slice(-1)

这很酷,可以自定义导航框的链接,因此指向当前链接的CSS类受到启示。

JS:
$('.menu a').each(function() {
    if ($(this).attr('href') == location.href.split("/").slice(-1)){ $(this).addClass('curent_page'); }
});

CSS:

a.current_page { font-size: 2em; color: red; }

3
如果您直接使用location.pathname.split("/").slice(-1)作为location.pathname.split("/").slice(-1).includes("OLD")的数组,实际上只有一个元素。 - Dave
2
我喜欢使用location.href.split("#")[0].split("?")[0].split("/").slice(-1)来去除查询字符串和哈希值。 - Gideon Mulder
@DAve,感谢您的添加,所以您需要在末尾加上[0]来获取字符串。 - Timo

14

试一试

location.pathname.substring(location.pathname.lastIndexOf("/") + 1);

location.pathname返回页面URL的一部分(不包括域名)。要仅获取文件名,您需要使用substring方法进行提取。


window.location.href.substring(window.location.lastIndexOf("/") + 1); 对我有用。 - Shantilal Suthar


6

即使url以/结尾,这也能正常工作:

var segments = window.location.pathname.split('/');
var toDelete = [];
for (var i = 0; i < segments.length; i++) {
    if (segments[i].length < 1) {
        toDelete.push(i);
    }
}
for (var i = 0; i < toDelete.length; i++) {
    segments.splice(i, 1);
}
var filename = segments[segments.length - 1];
console.log(filename);

5
使用 window.location.pathname 获取当前页面 URL 的路径。

2
这提供完整的URL,而不是页面名称。 - Hugolpz

4

获取文档名称

location.href.split("/").pop().split("?").shift();

使用查询字符串

location.href.split("/").pop()

1

单语句,使用尾随斜杠。如果您正在使用IE11,则必须polyfillfilter函数。

var name = window.location.pathname
        .split("/")
        .filter(function (c) { return c.length;})
        .pop();

1
const page = location.href.split("/").slice(-1).toString().replace(".EXTENSION", "").split("?")[0];

这将获取页面名称并删除扩展名(如.html或.php),以及所有的GET参数(如?id=1)。如果没有扩展名,您可以删除replace()部分;否则,请用您喜欢的扩展名替换.EXTENSION。

现在有一个API可以做到这一点,URL()请参见https://developer.mozilla.org/en-US/docs/Web/API/URL - NVRM

0

@Ethan的解决方案是我所需要的,但我不得不进行一些更改。即,toDelete数组中的元素没有考虑到从数组中删除元素会导致段数减少。因此,以下是我的建议:

let segments = window.location.pathname.split('/');
let toDelete = [];
for (let i = 0; i < segments.length; i++) {
    if (segments[i].length < 1) {
        toDelete.push(i);
    }
for (let i = 0; i < toDelete.length; i++ ) {
    segments.splice(toDelete[i], 1);
    for (let j = i; j < toDelete.length; j++ ) {
        (toDelete[j])--;
    }
}
let filename = segments[segments.length - 1];
console.log(filename);

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