Ever needed to create a table of contents for all your <h*>-elements on a webpage?
The following javascript function is a easy way to do it.
The Code
/**************************************************************************************
* Create a table of contents for the h-elements on the page.
* @param contentAreaSelector the jQuery selector for the element containing all
* the headers to show in the table of contents
* @param targetSelector the jQuery selector for the resulting table of contents
* @return nothing
*************************************************************************************/
function table_of_contents(contentAreaSelector, resultSelector){
var target = $(resultSelector);
var headers = $(contentAreaSelector).find("h1:visible, h2:visible, h3:visible, h4:visible, h5:visible, h6:visible, h7:visible, h8:visible, h9:visible");
//------------------------------
//Loop all visible headers
currentLevel = 1;
resultHTML = "<h1>Table of Contents</h1><ul>";
for(i = 0; i < headers.length ; i++){
head = headers[i];
headLevel = head.tagName[1];
//------------------------------
//increase list depth
while(currentLevel < headLevel){
resultHTML += "<ul>";
currentLevel++;
}
//------------------------------
//decrease list depth
while(currentLevel > headLevel){
resultHTML += "</ul>";
currentLevel--;
}
resultHTML += '<li><a href="#toc_anchor_'+i+'">'+head.innerHTML+'</li>';
$(head).before('<a name="toc_anchor_'+i+'"></a>');
}
//------------------------------
// Close remaining levels
while(currentLevel > 1){
resultHTML += "</ul>";
currentLevel--;
}
target.html(resultHTML);
}