Create table of contents

Source code

function NumberHeadings(list, parent, prefix)
{
    if (list.length == 0)
        return '';

    var menu = '';
    var level = parseInt(list[0].tagName.substr(1));
    var index = 0;
    
    menu += '<ul>\n';
    list.each(function() {
            var current = $(this);

            if (parent != '' && current.prevAll('h' + (level - 1)).eq(0).html() != parent)
                return '';
            
            var number = prefix  + (++ index) + '.';
            var content = number + ' ' + current.html();
            
            current.html(content);
            current.before('<a name="' + number + '"></a>');
            menu += '<li><a href="#' + number + '">' + current.html() + '</a></li>\n';
            
            menu += NumberHeadings(current.nextAll('h' + (level + 1)), content, number);
        });
    menu += '</ul>\n';
    
    return menu;
}

2010-03-31: Had my &lt; and &gt; the wrong way round. I am an idiot. Fixed. The HTML thing. Not the idiot thing.

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum nisl justo, posuere eu viverra et, pretium non diam. Mauris semper eros nec ante blandit luctus. Duis ultricies justo non ligula vehicula at consectetur mauris pulvinar. Integer dictum elit id purus vestibulum placerat. Phasellus sed rhoncus ligula.

Donec suscipit pharetra felis a imperdiet

Vivamus tristique accumsan est in luctus. Pellentesque eu libero id orci fermentum luctus vitae ut nisl. Pellentesque et dolor ut nulla dictum porta. Donec faucibus sem diam, volutpat sodales eros. Praesent placerat orci eget diam varius facilisis. Donec risus turpis, ultrices ac pulvinar vitae, gravida in ante

Donec feugiat risus at neque convallis dapibus elementum libero lobortis. Vestibulum aliquam, orci vitae auctor sollicitudin, dolor nulla faucibus metus, a ultrices metus neque nec dolor. Nunc pellentesque, urna a consectetur mattis, velit tortor tempor nisl, vitae consectetur magna velit non odio. Vestibulum ut mauris ornare nisi sodales mollis. Vestibulum sem massa, scelerisque in consequat at, blandit nec nulla. Cras ut tortor sapien, sit amet pulvinar nunc. Morbi in enim turpis, quis eleifend orci.

Morbi quis eleifend
Vestibulum ut tortor sapien
Nunc faucibus
Pellentesque et scelerisque in consequat at

Pellentesque

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.

Etiam ullamcorper dapibus pretium

Integer eget ante in dolor tincidunt suscipit non non sapien. Aenean a imperdiet nisi. Nullam turpis libero, fermentum non hendrerit sit amet, consectetur a sem. Suspendisse dapibus mi quis magna egestas faucibus. Fusce quis urna leo, in adipiscing quam.

Aenean porttitor

Fusce consectetur tristique erat at lobortis. Suspendisse accumsan sem nec erat molestie sed molestie nisl dictum. Donec id dui non urna placerat ultrices quis quis dolor. Proin velit velit, blandit nec pulvinar sit amet, feugiat at nibh. Nunc nisl elit, consectetur ut interdum eu, laoreet quis tortor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam ornare facilisis augue ut convallis. In venenatis ultrices laoreet. Nullam bibendum leo ullamcorper magna mollis commodo eu ac turpis.

Morbi in enim turpis

Curabitur scelerisque sapien vel mauris feugiat feugiat. Phasellus dictum cursus odio, at porttitor nisl mattis a. Proin sed nisi vitae mi sodales eleifend.

Praesent malesuada lorem in ligula bibendum a iaculis neque laoreet. Vivamus nunc nisi, vehicula at mattis lacinia, ornare vitae ipsum. Duis tortor neque, molestie ut posuere ac, blandit sit amet lorem. Pellentesque mattis dictum dui, in vulputate lorem rutrum a. Ut ut euismod eros. Aliquam suscipit laoreet ipsum, et interdum neque malesuada eget. Fusce molestie vestibulum tincidunt. Phasellus sit amet sollicitudin erat. In id velit nisi. Suspendisse commodo varius enim, scelerisque faucibus purus ullamcorper in. Donec et diam libero. Etiam eleifend lobortis suscipit. Fusce nec pharetra purus. Integer ullamcorper leo eu tellus feugiat congue.

Suspendisse

In elementum justo sed quam consectetur elementum. Praesent gravida, nisi eu feugiat faucibus, velit mi volutpat ligula, a venenatis magna nisl ut dui. Aliquam iaculis, velit vel gravida rhoncus, magna tellus sagittis libero, quis vulputate leo orci id turpis. Nam at urna mi. In egestas sagittis magna quis mollis. In suscipit, mauris in iaculis iaculis, elit tortor semper mauris, et imperdiet massa arcu et eros.

Aliquam viverra

Integer quis turpis urna, ac vulputate odio.

Vivamus

Proin feugiat tortor sit amet erat mattis ut congue leo lacinia. In et enim urna, at tincidunt nunc. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec iaculis tempor diam ac adipiscing. Praesent enim nisi, commodo eu tincidunt ut, suscipit vitae metus. Ut sit amet justo eget tortor feugiat volutpat. Cras convallis laoreet porttitor. Integer id ipsum nisl, facilisis vulputate massa. Sed sed odio in nisi malesuada ultrices

Praesent gravida

Fusce vulputate purus a metus consectetur faucibus. Maecenas fringilla vehicula purus, in ullamcorper felis ultricies a. Quisque ullamcorper ultrices malesuada.

Maecenas

Nunc rutrum odio lobortis quam suscipit tristique id tincidunt ipsum. Vivamus gravida urna et dolor euismod dignissim. Sed congue magna at quam eleifend egestas. Cras egestas placerat pharetra. Etiam cursus sollicitudin augue, nec fringilla purus convallis a. In at eleifend ante. Etiam euismod porta magna, non aliquet erat sagittis sit amet. In ullamcorper pellentesque elementum. Pellentesque urna libero, congue vel viverra sit amet, tempus sed massa.

Sed sed odio

Etiam lacinia pretium nulla, sit amet facilisis felis faucibus ut. Nunc nec nisl leo, id fringilla nisl. Proin fringilla consequat dolor eu placerat. Vivamus ac magna metus. Maecenas auctor ultricies sapien sit amet vulputate. Curabitur a tellus sit amet dui commodo ultricies sed vestibulum libero. Ut ornare, sapien sodales dapibus tristique, dui sapien euismod ligula, non euismod tellus lacus at magna. Duis auctor dictum faucibus. Quisque massa lacus, pretium vitae ornare et, luctus ut enim. Cras at purus massa, eu tincidunt mauris.

Vivamus nec sem sed urna mollis condimentum et eu augue. In hendrerit vulputate nulla, quis laoreet eros sollicitudin non. Nam nisl eros, convallis at varius a, condimentum vitae libero. Proin eu est nibh. Duis urna libero, tincidunt sit amet congue a, facilisis a nulla. In hac habitasse platea dictumst. Mauris et nulla vitae velit pellentesque vehicula. Duis at orci erat. Nulla ut mi vitae lorem aliquet suscipit vitae vel nisl.

Duis dictum venenatis arcu

Proin ante dolor, vestibulum ut pulvinar pulvinar, iaculis at quam. Aliquam tempus, elit eu pretium consequat, dolor turpis porttitor augue, sed aliquet dolor est nec sapien. Duis dictum venenatis arcu, vel ultricies tellus gravida at. Phasellus ultricies convallis iaculis. Vestibulum ut neque vel est posuere porttitor tincidunt eget mi. Donec est nulla, imperdiet nec accumsan et, iaculis sed arcu.

Phasellus dictum

Nam vehicula

Aliquam erat volutpat. Curabitur malesuada semper rutrum. Aenean laoreet tempor nunc, sed aliquet magna porttitor sodales. Aenean commodo tortor ac orci elementum vehicula.

Aliquam porta ligula

Mauris blandit varius dui, et hendrerit nunc fringilla sit amet. Curabitur vitae tellus felis, vel porttitor nulla. Aliquam vitae risus a nunc gravida adipiscing. Donec venenatis cursus nisl ut gravida. Maecenas sapien neque, ultrices ut vehicula sed, dignissim vel arcu.

Pellentesque mattis dictum dui, in vulputate lorem rutrum a. Ut ut euismod eros. Aliquam suscipit laoreet ipsum, et interdum neque malesuada eget. Fusce molestie vestibulum tincidunt. Phasellus sit amet sollicitudin erat. In id velit nisi. Suspendisse commodo varius enim, scelerisque faucibus purus ullamcorper in. Donec et diam libero. Etiam eleifend lobortis suscipit. Fusce nec pharetra purus. Integer ullamcorper leo eu tellus feugiat congue.

Donec feugiat risus

Cras blandit

Duis auctor dictum faucibus. Quisque massa lacus, pretium vitae ornare et, luctus ut enim. Cras at purus massa, eu tincidunt mauris.

Curabitur malesuada

Curabitur a tellus sit amet dui commodo ultricies sed vestibulum libero. Ut ornare, sapien sodales dapibus tristique, dui sapien euismod ligula, non euismod tellus lacus at magna.