Конечно можно, в чем проблема?
Заюзал jQuery в коде, если что.
Пример.
<h2>Заголовок 1</h2> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis vestibulum consequat maximus. Pellentesque feugiat, nisl eget ornare lobortis, sem nisi maximus nisl, ultricies dapibus turpis odio id magna.
<h2>Заголовок 2</h2> Donec condimentum mauris nunc. Integer non mi at nunc imperdiet bibendum ac et sapien. Donec porta rhoncus nibh, eget egestas dui.
<h2>Заголовок 3</h2> Praesent dui nisl, molestie quis tellus sit amet, ullamcorper consectetur odio. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
#nav {
border: 1px solid black;
padding: 15px;
box-sizing: border-box;
}
$(() => {
//код внутри такого блока выполняется только после загрузки страницы
$('body').prepend('<div id="nav"></div>');
//создаем блок-обертку для содержания
for (let i = 0, j = $('h2').length; i < j; i++)
//создаем цикл, i - счетчик, j - кол-во заголовков на странице
$('#nav').append(`${$('h2').eq(i).html()}<br>`);
//добавить пункт навигации: НАЗВАНИЕ + ПЕРЕНОС СТРОКИ
})
Результат вот тут можно увидеть:
https://jsfiddle.net/c6dhdf4m/4/