ブログに見出しを設置できる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はこちら)。

EmmetのWrap with Abbreviationで複数行のマークアップを効率的に行う
Vue CLIをインストールしたのに「command not found: vue」と表示されてしまう場合の対処法
WordPressでbloginfo()の一部パラメーターの廃止・非推奨に注意!
PS Auto Sitemapを使って自分のブログのサイトマップを作成する
Android実機で表示しているサイトを、Chrome開発者ツールで開いて検証する方法
gulp 4.0から新しく加わったseriesとparallelについての備忘録
Vue Routerでページ遷移後にトーストを表示させる方法
Vue.jsで値段を表示するときに3桁ごとにカンマを入れる方法
Facebookでシェアした記事の画像反映ができていない時の修正方法
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
ファイル移動を補助するPath Finderの特徴的な機能「ドロップスタック」について
Webサイト全体をキャプチャするならFull Page Screen Captureがおすすめ
ブラウザ上で動作するデザインツール「Figma」のアカウント作成から必要最低限の設定
Dart Sassを使う上で1番基本的なネストやアンパサンドの書き方|Dart Sass入門
Illustratorのサンプルテキストの割り付けを少しだけ便利にする
Vue CLIでGA4を導入する方法
Google Maps APIでピンのアクティブ時にピン画像を変える方法
Karabiner-Elementsの独自ルールの作成方法
Figmaで使っている色やフォントなどを一括変更する「Batch Styler」