# Tiny Table-of-Contents JS Snippet ```js const toc = document.getElementById('table-of-contents'); for (const x of document.querySelectorAll('h2, h3')) { const id = x.innerText.replaceAll(/[^a-z0-9]/gi,''); x.id = id; const item = `
  • ${x.innerText}
  • `; switch (x.tagName.toLowerCase()) { case "h2": toc.insertAdjacentHTML('beforeend', `${item}`); break; case "h3": [...toc.querySelectorAll('ul')]?.pop()?.insertAdjacentHTML('beforeend', item); break; } } ``` --- ## Example The following markdown... ```md # Title lorem ipsum ## Chapter 1 lorem ipssum ### Section A lorem ipssum ## Chapter 2 lorem ipssum ### Section B lorem ipssum ### Section C lorem ipssum ``` ...produces this HTML... ```html

    Title

    lorem ipsum

    Chapter 1

    lorem ipsum

    Section A

    lorem ipsum

    Chapter 2

    lorem ipsum

    Section B

    lorem ipsum

    Section C

    lorem ipsum

    ``` ...and JS transforms it on page load. ```html

    Title

    lorem ipsum

    Chapter 1

    lorem ipsum

    Section A

    lorem ipsum

    Chapter 2

    lorem ipsum

    Section B

    lorem ipsum

    Section C

    lorem ipsum

    ```