html 带有锚链接的Js目录未滚动到所需标签

5hcedyr0  于 2022-12-16  发布在  其他
关注(0)|答案(1)|浏览(122)

我有一个很小的JS代码,它可以检测h1到h6标签,并提供一个目录。问题是,单击标题(例如标题5)只是将页面滚动到顶部,而我希望它滚动到标题5。我是新来的JS,所以我不确定我是否做错了什么。
我感谢任何答复和建议,谢谢。

编辑

感谢MrUpsidown的建议,把id添加到h1标签中,现在脚本可以工作了。我不知道这是否是一个好的实践,所以我欢迎使脚本更好的建议。

var headings = document.querySelectorAll('h1, h2, h3, h4, h5, h6');
var toc = document.createElement('div');
toc.id = 'toc';
document.body.appendChild(toc);
for (var i = 0; i < headings.length; i++) {
  var heading = headings[i];
  var anchor = document.createElement('a');
  anchor.href = '#' + heading.id;
  anchor.innerHTML = heading.innerHTML;
  toc.appendChild(anchor);
}
#toc {
    display: flex;
    flex-direction: column;
    flex-wrap: nowrap;
}

#toc > a {
  padding: 10px;
}

#toc > a:hover {
  background: gray;
  color: #fff;
}
<h1 id="one">Title 1</h1>
<p>Sample Text 1</p>

<h1 id="two">Title 2</h1>
<p>Sample Text 2</p>

<h1 id="three">Title 3</h1>
<p>Sample Text 3</p>

<h1 id="four">Title 4</h1>
<p>Sample Text 4</p>

<h1 id="five">Title 5</h1>
<p>Sample Text 5</p>

<h1 id="six">Title 6</h1>
<p>Sample Text 6</p>
bqf10yzr

bqf10yzr1#

当然,您可以使用Javascript来实现这一点,尽管我更愿意尝试使用唯一的和自定义的ID来输出HTML。
在循环中,创建自定义标题

let title = 'title'+ (i+1); // Create ids of title1, title2, etc.

然后用计算出的标题设置标题HTMLid属性

heading.id = title; // Set heading id with title

最后用计算出的标题设置锚href

anchor.href = '#' + title; // Set href with title

一个一个三个一个一个一个一个一个四个一个一个一个一个一个五个一个

相关问题