アンカーリンクを自動的に増やす

タイトルの数に応じてアンカーリンクを自動で作成します。
wpのビジュアルエディタ部分で実装しました。ビジュアルエディタで見出し(h2)を追加するとその数に応じてアンカーリンクが増えます。静的なサイトでも十分活躍できそう。

See the Pen rJWrWV by nekuta (@nekuta) on CodePen.

HTML

<div class="topics_box">
  <!-- もしリンクあり見出しがあるなら<div class="topics_link">アンカーリンク</div>が出る -->
  <div class="topics_single_list">
    <!-- ここにアンカーリンクが生成される -->
  </div>
</div>
<h2 class="topics_content">
  <h2 class="ttl_link">見出し1
</h2>
<div class="topics_txt">
  本文
</div>
<h2 class="ttl_link">見出し2</h2>
<div class="topics_txt">
  本文
</div>
<h2 class="ttl_link">見出し3</h2>
<div class="topics_txt">
  本文
</div>

js(jQuery)

  $(function() {
    var wrapper_single = $('.wrapper_single');
    //空の配列を作る 
    var ttl_name = [];
    var ttl_link = [];
    //見出しがあるなら下記追加 
    if ($('.ttl_link').length) {
      $('.topics_box').prepend('<div class="topics_link">アンカーリンク</div>');
    } else {}
    //eachでttl_linkをそれぞれ見る 
    $('.ttl_link').each(function(i) {
      //見出しにidを連番を振る 
      $(this).attr('id', 'link_' + (i + 1));
      //ttl_nameにタイトルを格納 
      var name = $(this).text();
      ttl_name.push(name);
      //ttl_linkにidを格納 
      var link = $(this).attr('id');
      ttl_link.push(link);
      var single_list = $('.topics_single_list');
      single_list.append('<div><a href="#' + ttl_link[i] + '">' + ttl_name[i] + '</a></div>');
    });
  });

解説

//空の配列を作る
var ttl_name = [];
var ttl_link = [];

まず空の配列を2つ作ります。
ttl_nameに見出しの名前を、ttl_linkにアンカーリンクを入れる想定です。

  //eachでttl_linkをそれぞれ見る
  $('.ttl_link').each(function(i) {
    //見出しにidを連番を振る
    $(this).attr('id', 'link_' + (i + 1));
    //ttl_nameにタイトルを格納
    var name = $(this).text();
    ttl_name.push(name);

    //ttl_linkにidを格納
    var link = $(this).attr('id');
    ttl_link.push(link);

    var single_list = $('.topics_single_list');
    single_list.append('<div><a href="#' + ttl_link[i] + '">' + ttl_name[i] + '</a></div>');
  });

存在する.ttl_linkをeachで回してattrでidを振っていきます。
そして先ほど作った空の配列に値を入れていきます。.pushは値を配列に追加するメソッド。
最後に配列の値を入れ込んで.topics_single_listへappendします。appendは要素を追加するメソッド。

参考サイト

jQueryのeach()で複数の要素、配列、オブジェクトをループ処理
jQueryを利用したDOM操作 要素の追加メソッドまとめ