茱萸note

電子工作の備忘録と旅行の記録

Web 電子工作

記事の先頭に目次を置く

投稿日:2016年3月14日 更新日:

Blogの記事の先頭に自動的に目次を生成するにはどうすれば良いか?


JavaScript を使って実装したいと思います.

<h3>を列挙

記事上部には以下を書き加えます。

<div id="index_h3"></div>

記事下部には以下を書き加えます。

<script type="text/javascript"> 
(function(){
   var elements = document.getElementsByTagName("h3");
   var str = "<ul>\n";
   for(var i = 1;i < elements.length;i++){
       str += "<li>elements[i].innerHTML</li>\n";
   }
   str += "</ul>";
   document.getElementById("index_h3").innerHTML = str;
}());
</script>

<div id="index_h3"></div>に箇条書きにして<h3>要素を列挙しています。

ページ内リンクを張る

記事下部を以下のように修正します。

<script type="text/javascript"> 
(function(){
   var elements = document.getElementsByTagName("h3");
   var str = "<ul>\n";
   for(var i = 1;i < elements.length;i++){
       elements[i].setAttribute("id","h3_" + i);
       str += "<li><a href=\"#h3_" + i + "\">" + elements[i].innerHTML + "</a></li>\n";
   }
   str += "</ul>";
   document.getElementById("index_h3").innerHTML = str;
}());
</script>

ただし、はてなブログの場合、自動的にKeyWordリンクが貼られてしまった見出しでは正しくリンクが張れないので、正規表現をつかって目次の見出しタイトルのHTMLタグを削除します。見出し本体のHTMLタグ並びにKeyWordリンクは削除されないのでご安心を。

<script type="text/javascript"> 
(function(){
   var elements = document.getElementsByTagName("h3");
   var str = "<ul>\n";
   for(var i = 1;i < elements.length;i++){
       elements[i].setAttribute("id","h3_" + i);
       str += "<li><a href=\"#h3_" + i + "\" style=\"color:#000000;\">" + elements[i].innerHTML.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,"") + "</a></li>\n";
   }
   str += "</ul>";
   document.getElementById("index_h3").innerHTML = str;
}());
</script>

上記のCodeではついでに目次の文字色を黒に変えています。

-電子工作
-,

関連記事

ESP8266 で AES-CBC PKCS#7 Padding による暗号化・復号

ESP8266 で AES アルゴリズム・CBC モード・PKCS7 パディング の暗号化・復号化をする方法を述べます。

Raspberry Pi をスマートリモコン化! Alexa で部屋の照明を操作する【Alexa×Raspberry Pi その2】

Raspberry Pi に赤外線LED・赤外線受光モジュールを付けて、Raspberry Pi を学習リモコン・スマートリモコン化します。そして、Raspberry Pi を AWS IoT 連携させて Alexa で部屋の照明を操作します。

権限のない環境でvirtualenvを入れる

sudoが使えない、root権限のない環境でvirtualenvを入れます。

【Ubuntu】【上級者向け】EFIシステムパーティションを作成する

「空っぽのSSD・HDD・USBメモリにUbuntuをインストールしたい!」といった人に向けて、空っぽのSSD・HDD・USBメモリにEFIシステムパーティションを作成する方法を説明します。

Alexa で ESP8266 を操作する方法【Alexa×Arduino 検討】

Alexa を搭載した Amazon Echo 等を使って ESP8266(Arduino)を操作する方法を検討します。