ブログに見出しを設置できるjQueryプラグイン「TOC | jQuery Table of Contents」

ブログ等を作成する時に、目次を作りたくなる時がよくあります。
目次があれば記事の全体を掴む事が出来ますし、そこからリンクをクリックする事で目的の位置までスクロール出来ます。
このブログでも実装していて、PCの場合はサイドバーに追尾してくる形で表示。スマホの場合は右下にアイコンがあってそれをタップする事で目次が表示されるようにしています。
今回はそれらの実装に使用したjQueryプラグインの「TOC | jQuery Table of Contents Plugin」を紹介します。ちなみに、TOCはTable of Contents(見出し)の略です。
TOCのダウンロード
TOCのサイトから「Production」をクリックして「toc.min.js」をダウンロードします。
あとはHTMLの</body>閉じタグ前に読み込みの記述を書きます。また、このプラグインはjQueryが必要なのでjQueryの読み込みと、後ほどTOCの設定を書く必要もあるので、予めmain.jsというファイルを作成して読み込んでおきましょう。
index.html<script src="./js/jquery.min.js"></script> //jQueryの読み込み
<script src="./js/toc.min.js"></script> //先程ダウンロードしたTOCプラグインの読み込み
<script src="./js/main.js"></script> //TOCの設定を記述するファイルの読み込み読み込む順番は「jQuery → TOC → 設定用ファイル」なので間違えないようにしましょう。
目次の設定
ここからは目次を表示させるための設定です。
まずはHTMLに目次を表示する要素を用意します。今回は「toc」というidを割り振っておきます。
index.html<div id="toc"></div>後はjsファイルの方で、設定を行います(不要な部分は省略可能)。
下記の設定は公式サイトの「Options」のコメントアウトしてある部分を日本語にして少し分かりやすくしたものになります。
main.js$('#toc').toc({
'selectors': 'h1,h2,h3', //見出しに表示する要素(classやidでの指定も可能)
'container': 'body', //コンテナとなる要素
'smoothScrolling': true, //スムーススクロールを有効にするか(true / false)
'prefix': 'toc', //アンカータグやclass名につけるプレフィックス
'onHighlight': function(el) {}, //セクションがハイライトされた時の処理を書く
'highlightOnScroll': true, //ハイライトを有効にするか(true / false)
'highlightOffset': 100, //次の見出しのトリガーとなる位置
'anchorName': function(i, heading, prefix) { //アンカーネームの名前の設定(iは見出しの順番)
return prefix+i;
},
'headerText': function(i, heading, $heading) { //ヘッダーアイテムテキストの設定
return $heading.text();
},
'itemClass': function(i, heading, $heading, prefix) { // アイテムクラスの設定
return $heading[0].tagName.toLowerCase();
}
});自分のブログでは、下記の設定にしています。
セレクタはブログ本文内の見出しに限定していないと、余計な見出しタグまで取ってきてしまいます。最低限これだけ設定しておけば十分に見出しは作れます。
main.js$(function(){
$('#toc').toc({
'selectors': '.entory_content h2,.entory_content h3,.entory_content h4,.entory_content h5,.entory_content h6', //目次として表示する要素のCSSセレクターを指定
'highlightOffset': 0,
'highlightOnScroll': true,
'anchorName': function(i, heading, prefix) {
return prefix+i;
}
});
});最後にCSSを整えれば完成となります(例となるCSSはこちら)。

Nuxt.jsでのページ遷移設定方法(Vue Routerやnuxt-link)|Nuxt.jsの基本
Gitで1行しか変更していないはずのに全行変更した判定になってしまう
Vue Routerでページ遷移後にトーストを表示させる方法
TwitterとFacebook用のOGP設定方法と表示確認方法
ウェブサイト上で簡単にWYSIWYGエディタを実装する「TinyMCE」
コーディング時に「アノテーションコメント」を使ってコードを見やすく管理する
PubSubHubbubを利用してWebサイトの更新をリアルタイムに通知しよう
Visual Studio Codeとスニペット・ドキュメント検索アプリの「Dash」連携を行うプラグイン
Visual Studio Codeで複数ファイルを編集するときにタブやペインの操作方法
Nuxt.jsで「Classic mode for store/ is deprecated and will be removed in Nuxt 3.」のエラーメッセージが表示される場合の対処法
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
chezmoi(シェモア)で始めるdotfiles管理
GitHubの通知を見逃さない!通知に特化したアプリ「Gitify」
Keyboard Maestroの変数基礎
Neovimを使い始める最初の一歩として便利な「LazyVim」
ウェブサイトをmacOSアプリとしてラッピングする「Unite Pro」
Keyboard Maestroの「Macro Debugger」で複雑なマクロのデバッグを行う方法
無料版でも高機能なランチャーアプリ「Raycast」の基本機能と環境設定
OnyXでターミナルを使わずにmacOSの詳細設定を行う
軽量で高速なターミナルエミュレーター「Ghostty」の設定方法
Eagleで実現するクリエイティブ素材の簡単管理