转到第一页不起作用

问题描述 投票:0回答:4

我正在尝试创建一个按钮以进入第一个历史记录页面,但我不知道为什么我的代码不起作用。这是我的代码:

function firstpg() {
  var startpt = '-' + window.history.length;
  window.history.go(startpt);
}
<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <button onclick="firstpg()">Go First</button>
  </body>
</html>

有什么问题吗?

javascript html browser-history
4个回答
0
投票

历史记录还包括当前页面,因此您需要从长度中减去

1
才能转到第一页。

var startpt = '-' + ( window.history.length - 1) ;

var startpt = -(window.history.length - 1) ;

0
投票

您需要否定

length
,因为它不是基于
0
的。所以尝试一下:

var startpt = ( window.history.length - 1) * -1;

这应该有效:

<!DOCTYPE html>
<html>
  <head>
    <script>
      function firstpg() {
        var startpt = ( window.history.length - 1) * -1;
        window.history.go(startpt);
      }
    </script>
  </head>
  <body>
    <button onclick="firstpg()">Go First</button>
  </body>
</html>

0
投票

最简单、最容易的解决方案是(window.history.length):

window.history.go(1 - window.history.length);

以下数学运算已被简化:

(window.history.length - 1) * -1
(window.history.length * -1) - (1 * -1)
-windows.history.length - (-1)
-windows.history.length + 1
1 - windows.history.length

0
投票

作为一个不完美的解决方案,可以通过循环实现返回到历史堆栈中的第一页:

let length = history.length;
for (step = length - 1; step > 0; step--) {
  history.back(step);
}

如果步数大于

history.length
,则
history.back(step)
将被浏览器忽略。因此,这个循环将尝试迭代地发出返回命令,直到到达第一页。

如果当前页面不在历史堆栈顶部,

history.go(-(window.history.length - 1))
将不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.