本記事では、サイドバーで目次を表示する方法を解説しています。JAMStackでブログを作る際に、必要になると思います。参考になれば幸いです。
本ブログでは、Nuxt.jsを使っているのですが、JavaScriptを使用しているので、基本的な実装方法はどのフレームワークを使用しても変わらないと思います。
document.addEventListener("DOMContentLoaded", () => { const article = document.querySelector(".article") const heads = article.querySelectorAll("h1, h2") if (heads && heads.length) { let contents = "" heads.forEach((head, i) => { contents += `<li><a href="#head${i}">${head.textContent}</a></li>` head.innerHTML += `<a id="head${i}"></a>` }) document.querySelector( "#table-of-content" ).innerHTML += `<ol>${contents}</ol>` } })
Window: DOMContentLoaded イベントで、最初の HTML 文書の読み込みと解析が完了を待ってから、Headタグを取得します。
document.querySelector(".article")
で記事のセレクタを取得します。
次にarticle.querySelectorAll("h1, h2")
でh1
とh2
タグを取得しています。
そして、"#table-of-content"
にHTMLを挿入しています。
<div id="table-of-content" />
このようにidを指定していれば、HTMLが挿入されます。
セレクタは、classでもidでも良いと思います。
mounted
の中に、JavaScriptのコードを入れてあげてください。
mounted() { // JavaScriptのコード }
created
の中にコードを入れてしまうと、document
が読み込めないので、注意しましょう。