This generates a table of contents (TOC) for HTML documents based on header elements. See HtmlMode for more.

You may also be interested in html-pagetoc.el that comes with nXhtml. (This mode also contains html-toc.el for table of contents to use with frames and html-wtoc.el for table of contents that is mixed with the pages.)

Note that the following code does not work when there are attributes in the header tags.

 (defun html-show-toc ()
   "Shows a TOC based on headings tags <H[1-6]>"
   (if sgml-tags-invisible
       (error "SGML tags are invisible")
     (occur "<h[1-6]>")
     (pop-to-buffer "*Occur*")
     (goto-char (point-min))
     (replace-string "<h1>" "")
     (goto-char (point-min))
     (replace-string "<h2>" "  ")
     (goto-char (point-min))
     (replace-string "<h3>" "    ")
     (goto-char (point-min))
     (replace-string "<h4>" "      ")
     (goto-char (point-min))
     (replace-string "<h5>" "        ")
     (goto-char (point-min))
     (replace-string "<h6>" "          ")
     (goto-char (point-min))
     (replace-regexp "</h[1-6]>" "")
     (goto-char (point-min))
     (toggle-read-only 1)))