如何在JavaScript中更改当前URL?

32

在我的网站上:

http://mywebsite.com/1.html

我想使用

window.location.pathname

获取URL的最后一部分:

1.html

因为我把所有的网页用数字命名,所以我想在当前URL中加1,这样当我点击一个按钮时它就会将我重定向到下一页:

var url = 'http://mywebsite.com/' + window.location.pathname;
function nextImage (){
url = url + 1;  
}

有什么想法,为什么这不起作用?


你只是在URL中加1。你需要递增文件名的数字部分-#.html。 - Mark
4个回答

31

你的示例未能正常运行,因为你试图将数字1添加到一个看起来像这样的字符串:"1.html"。这只会得到这个结果:"1.html1",这不是你想要的。你需要先分离字符串中的数字部分,然后将其转换为实际的数字才能进行数学计算。在将其转换为实际数字后,你可以增加它的值,然后再将其与字符串的其余部分组合在一起。

你可以使用类似这样的自定义替换函数来分离原始 URL 的各个部分并将数字替换为递增的数字:

function nextImage() {
    return(window.location.href.replace(/(\d+)(\.html)$/, function(str, p1, p2) {
        return((Number(p1) + 1) + p2);
    }));
}

接下来您可以这样调用它:

window.location.href = nextImage();

这里有一个演示:http://jsfiddle.net/jfriend00/3VPEq/

对于任何以一些数字系列结尾并且后跟 .html 的 URL,此方法都适用,如果您需要稍微不同的URL形式,可以调整正则表达式。


1
这更加健壮:
mi = location.href.split(/(\d+)/);
no = mi.length - 2;
os = mi[no];
mi[no]++;
if ((mi[no] + '').length < os.length) mi[no] = os.match(/0+/) + mi[no];
location.href = mi.join('');

当URL中有多个数字时,它会更改最后一个数字:
http://mywebsite.com/8815/1.html

它支持具有前导零的数字:
http://mywebsite.com/0001.html

示例


0

即使这不是你想要的好方法,也可以尝试以下提示: 变量url必须首先是数字

function nextImage (){
url = url + 1;  
location.href='http://mywebsite.com/' + url+'.html';
}

我猜他们期望你展示如何获取这个数字。 - Cees Timmerman

0
你正在做的是将字符串“1”附加到你的URL上。如果你想要将页面1.html链接到页面2.html,你需要从字符串中去掉1,加上1,然后重新组装字符串。
为什么不这样做呢:
var url = 'http://mywebsite.com/1.html';
var pageNum = parseInt( url.split("/").pop(),10 );
var nextPage = 'http://mywebsite.com/'+(pageNum+1)+'.html';

在这种情况下,nextPage将包含链接http://mywebsite.com/2.html。如果需要,可以很容易地放入函数中。


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