超簡単なティーストーリー自動目次を作成する(シンプルなJavaScript)

Last Updated: 2024 年 09 月 28 日 댓글

組織には目次機能が搭載されていないため、外部TOCスクリプトをロードして手動または自動で目次を挿入することがよくあります。私は、Thistory BlogにシンプルなJavaScriptとCSSコードで直接作成した目次(TOC)を使用しています。

超簡易ティストリー自動目次の作成

WordPressには、さまざまな無料および有料目次プラグインがあります。この WordPress ブログには現在、Fixed TOCという有料目次プラグインが使用されています。

私の記事のブログには、シンプルなJavaScript(JavaScript)とCSSの目次が適用されています。😄

外部目次スクリプトをロードしてカスタムする方法を利用する オデッセイに置き換えて、簡単な目次スクリプトを作成しました。

以下のJavaScriptとCSSコードが使用されました。

JSコード:


<script>
document.addEventListener("DOMContentLoaded", function() {
    function smoothScrollTo(element) {
        document.querySelector(element).scrollIntoView({
            behavior: 'smooth'
        });
    }

    var toc = document.createElement('nav');
    toc.id = 'table-of-contents';
    toc.setAttribute('aria-label', 'Table of Contents');
    toc.setAttribute('itemscope', '');
    toc.setAttribute('itemtype', 'http://schema.org/SiteNavigationElement');

    var tocLabel = document.createElement('div');
    tocLabel.id = 'toc-label';
    tocLabel.innerText = '목차';
    toc.appendChild(tocLabel);

    var ul = document.createElement('ul');
    var counter = { h2: 0, h3: 0, h4: 0 };

    var headings = document.querySelectorAll('.contents_style h2, .contents_style h3, .contents_style h4');
    if (headings.length > 1) {
        Array.prototype.forEach.call(headings, function(heading) {
            var headingLevel = heading.tagName.toLowerCase();
            if (headingLevel === 'h2') {
                counter.h2++;
                counter.h3 = 0;
                counter.h4 = 0;
            } else if (headingLevel === 'h3') {
                counter.h3++;
                counter.h4 = 0;
            } else if (headingLevel === 'h4') {
                counter.h4++;
            }

            var sectionNumber = counter.h2 + (counter.h3 ? '.' + counter.h3 : '') + (counter.h4 ? '.' + counter.h4 : '');
            var anchor = document.createElement('a');
            var headingId = 'heading' + sectionNumber.replace(/\./g, '-'); // 점(.)을 하이픈(-)으로 대체
            anchor.href = '#' + headingId;
            anchor.innerText = sectionNumber + ' ' + heading.innerText;
            anchor.setAttribute('itemprop', 'url');

            var li = document.createElement('li');
            if (headingLevel === 'h3') {
                li.classList.add('toc-h3');
            } else if (headingLevel === 'h4') {
                li.classList.add('toc-h4');
            }
            li.setAttribute('itemprop', 'name');
            li.appendChild(anchor);
            ul.appendChild(li);

            heading.id = headingId;
            heading.setAttribute('itemprop', 'name');
        });
        toc.appendChild(ul);

        var firstH2 = document.querySelector('.contents_style h2');
        if (firstH2) {
            firstH2.parentNode.insertBefore(toc, firstH2);
        }
    }

    var tocLinks = document.querySelectorAll('#table-of-contents a');
    tocLinks.forEach(function(link) {
        link.addEventListener('click', function(e) {
            e.preventDefault();
            var href = this.getAttribute('href');
            smoothScrollTo(href);
        });
    });
});
</script> 

CSSコード:

/* TOC */
#table-of-contents {
  background-color: #f8f9fa;
  border-radius: 10px;
  padding: 20px;
  margin-bottom: 30px;
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}

#toc-label {
  font-weight: 700;
  margin-bottom: 15px;
  font-size: 22px;
  color: #333;
  position: relative;
  display: inline-block;
    padding-bottom: 5px;
   border-bottom: 4px solid #007bff;
}

#table-of-contents ul {
  list-style: none;
  padding: 0;
  margin-left: 20px;
}

#table-of-contents ul li {
  margin-bottom: 10px;
  position: relative;
}

#table-of-contents ul li a {
  color: #333;
  text-decoration: none;
  transition: color 0.3s;
}

#table-of-contents ul li a:hover {
  color: #007bff;
}

#table-of-contents ul li.toc-h3 {
  margin-left: 15px;
}

#table-of-contents ul li.toc-h4 {
  margin-left: 30px;
}

同じコード WordPress サイトにも適宜変更して使用しています。

ティーストーリーでは、上記のJSコードとCSSコードをスキンファイルに追加するだけです。

コードをティーストーリースキンファイルに追加する方法

上記のコードを追加するには 飾る » スキンの編集に移動します。

スキン編集ページが表示されたら html編集 ボタンをクリックします。

上記のJavaScriptコードはHTMLタブの下部に移動しますすぐ上に追加します。

CSSコードは CSS タブをクリックして一番下に追加します。

適用 ボタンをクリックして変更を保存します。

自動目次を作成する方法

テキストにH2、H3、H4が2つ以上ある場合、目次は自動的に最初のH2項目のすぐ上に表示されます。

記事に投稿するときは、正しいタイトルタグを適用してください。

記事では、タイトル1はH2タグです。

  • タイトル1: H2 ヘディングタグ
  • タイトル2: H3 ヘディングタグ
  • タイトル3: H4 ヘディングタグ
  • タイトル4: H5 ヘディングタグ

このため、混乱する可能性がありますが、最初の小タイトルは「タイトル1」を使用してください。

既存の手動で目次コードを追加した場合は、削除する必要があります。

最後に、

以上で、ティーストーリーに使用できるシンプルな目次スクリプトについて見てきました。以前に私の記事のブログで紹介した自動目次コードは、外部TOCスクリプトをロードする方法でした。

オデッセイスキンでうまく機能しており、他のティーストーリーの公式スキンでもうまく機能すると思います。スキンによってはコードを少し変更する必要があるかもしれません。

参照


コメントを残す

コメント