根據巢狀階層項目自動產生網頁文章的目錄(單階層)
如果你用HTML寫了一個網頁,
裡面有用list寫成的項目,
也就是
<ol>
<li> </li>
<li> </li>
</ol>
下面這個JavaScript的程式碼可以替這些項目自動產生目錄。
<html> <body> <h1>Contents</h1> <p id="contents"></p> <h1>Context</h1> <ol> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="first">Chapter</li> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="first">Chapter</li> </ol> <script> //get all the first order title var f = document.getElementsByClassName("first"); //the total number of first order title var numberOF = f.length; //index for the loop var i, j, k; //give each title an id such that they can be linked for(i=0; i<numberOF; i++) { f[i].setAttribute("id", "f" + i); } //generate the contents var contents = ""; for(i=0; i<numberOF; i++) { contents += "<a href=#f" + i + ">"; contents += (i+1)+". "; contents += f[i].childNodes[0].nodeValue; contents += "</a>"; contents += "<br><br>"; } //show the contents document.getElementById("contents").innerHTML = contents; </script> </body> </html>
根據巢狀階層項目自動產生網頁文章的目錄(多階層)
如果是多階層的項目,
也就是
<ul>
<li>
<ul>
<li></li>
<li></li>
</ul>
</li>
</ul>
則可以用下面的程式碼。
<html> <head> <style> .first{color:red; font-weight: bold;} .second{color:orange; font-weight: bold;} .third{color:green; font-weight: bold;} .forth{color:black; font-weight: normal;} </style> </head> <body> <h1>An Article with Contents</h1> <h2>Contents</h2> <p id="contents"></p> <h2>Context</h2> <ol> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="first">Chapter <ol> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="second">Section <ol> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="third">Subsection <p class="forth">bla bla bla bla</p> </li> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="third">Subsection <ul> <li class="forth">item</li> <li class="forth">item</li> </ul> </li> </ol> </li> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="second">Section <ol> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="third">Subsection </li> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="third">Subsection </li> </ol> </li> </ol> </li> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="first">Chapter <ol> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="second">Section <ol> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="third">Subsection </li> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="third">Subsection </li> </ol> </li> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="second">Section <ol> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="third">Subsection </li> <!--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--> <li class="third">Subsection </li> </ol> </li> </ol> </li> </ol> <script> //get all the first order title var f = document.getElementsByClassName("first"); //the total number of first order title var numberOF = f.length; //index for the loop var i, j, k; //give each title an id such that they can be linked for(i=0; i<numberOF; i++) { f[i].setAttribute("id", "f" + i); //second order title within current first order title var s = f[i].getElementsByClassName("second"); var numberOSinF = s.length; for(j=0; j<numberOSinF; j++) { s[j].setAttribute("id", "f" + i + "s" + j); //third order title within current second order title var t = s[j].getElementsByClassName("third"); var numberOTinS = t.length; for(k=0; k<numberOTinS; k++) { t[k].setAttribute("id", "f" + i + "s" + j + "t" + k); } } } //generate the contents var contents = ""; for(i=0; i<numberOF; i++) { contents += "<a href=#f" + i + ">"; contents += f[i].childNodes[0].nodeValue; contents += "</a>"; contents += "<br>"; var s = f[i].getElementsByClassName("second"); var numberOSinF = s.length; for(j=0; j<numberOSinF; j++) { contents += "        "; contents += "<a href=#f" + i + "s" + j + ">"; contents += s[j].childNodes[0].nodeValue; contents += "</a>"; contents += "<br>"; var t = s[j].getElementsByClassName("third"); var numberOTinS = t.length; for(k=0; k<numberOTinS; k++) { contents += "                "; contents += "<a href=#f" + i + "s" + j + "t" + k + ">"; contents += t[k].childNodes[0].nodeValue; contents += "</a>"; contents += "<br>"; } } } //show the contents document.getElementById("contents").innerHTML = contents; </script> </body> </html>
上面的方法中,也可以不要用class,然後用first=getElementsByTagName("ul")及first.getElementsByTagName("li")。
注意到上面的方法不能用在建立以<h2></h2><h3></h3>為標題的目錄, 這個情形之下, 使用這個方法。
No comments:
Post a Comment