SiteExperts.com Logo Home | Community | Developer's Paradise | Jobs
User Groups | Site Tools | Site Information | Search

Inside Technique : W3C DOM Table of Contents : The Code

Recursive getHeaders() Approach

function getTextForElement(obj) {
 var str=""
 for (var i=0;i < obj.childNodes.length;i++) {
  if (obj.childNodes[i].nodeType==1)
   str+=getTextForElement(obj.childNodes[i])
  else if (obj.childNodes[i].nodeType==3)
   str = obj.childNodes[i].data
 }
 return str
}

function getHeaders(el,obj) {
 var tagList = "H1;H2;H3;H4;H5;H6;"
 if (tagList.indexOf(obj.tagName+";")>=0) {
  var eLI = document.createElement("LI")
  var eLIText = document.createTextNode(getTextForElement(obj))
  eLI.className="toc" + obj.tagName
  eLI.appendChild(eLIText)
  el.appendChild(eLI)
 }
 for (var i=0;i < obj.childNodes.length;i++)
  if (obj.childNodes[i].nodeType==1)
   getHeaders(el,obj.childNodes[i])
}


function doLoad() {
 var el = document.createElement("UL")
 var startEl = document.getElementsByTagName("BODY")[0]
 getHeaders(el,startEl)
 startEl.insertBefore(el,startEl.childNodes[0])
}

window.onload =doLoad

getElementsByTagName() Approach


function getTextForElement(obj) {
 var str=""
 for (var i=0;i < obj.childNodes.length;i++) {
  if (obj.childNodes[i].nodeType==1)
   str+=getTextForElement(obj.childNodes[i])
  else if (obj.childNodes[i].nodeType==3)
   str = obj.childNodes[i].data
 }
 return str
}

function getHeaders() {
 var obj = document.getElementsByTagName("*")
 var el = document.createElement("UL")
 var tagList = "H1;H2;H3;H4;H5;H6;"
 for (var i=0;i < obj.length;i++)
  if (tagList.indexOf(obj[i].tagName+";")>=0) {
   var eLI = document.createElement("LI")
   var eLIText = document.createTextNode(getTextForElement(obj[i]))
   eLI.className="toc" + obj[i].tagName
   eLI.appendChild(eLIText)
   el.appendChild(eLI)
  }
 return el
}

function ie_getElementsByTagName(str) {
 if (str=="*")
  return document.all
 else
  return document.all.tags(str)
}

if (document.all)
 document.getElementsByTagName = ie_getElementsByTagName

function doLoad() {
 var el = getHeaders()
 var startEl = document.getElementsByTagName("BODY")[0]
 startEl.insertBefore(el,startEl.childNodes[0])
}

window.onload =doLoad