javascript problem

Her postes alt, som ikke direkte har noget med Ubuntu at gøre.
thj01
Indlæg: 2667
Tilmeldt: 21. nov 2006, 10:06
Geografisk sted: Fredericia

javascript problem

Indlæg af thj01 »

Jeg er begyndt at skrive alle mine dokumenter til Linuxundervisning i HTML5, da det giver mig en god skriveproces samtidig med det giver mig fuld kontrol over design og opsætning.

I den sammenhæng har jeg hacket et TOC script: http://www.whitsoftdev.com/articles/toc.html. Det jeg har gjort er at tilføje to ekstra niveauer ... mener jeg at kunne huske.

Mit problem er, at jeg gerne vil have tocscriptet til også at generere en overskriftslinie der siger: "Indholdsfortegnelse" i en <div> tag ... og det kan jeg IKKE finde ud af :(.

Er der nogen her der kan se løsningen?

Kode: Vælg alt

/*
 * Dynamic Table of Contents script
 * by Matt Whitlock <http://www.whitsoftdev.com/>
 *
 * http://www.whitsoftdev.com/articles/toc.html
 *
 */

function createLink(href, innerHTML) {
   var a = document.createElement("a");
   a.setAttribute("href", href);
   a.innerHTML = innerHTML;
   return a;
}


function generateTOC(toc) {
   var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0;
   toc = toc.appendChild(document.createElement("ul"));
   for (var i = 0; i < document.body.childNodes.length; ++i) {
      var node = document.body.childNodes[i];
      var tagName = node.nodeName.toLowerCase();

      if (tagName == "h5") {
         ++i5;
         if (i5 == 1) toc.lastChild.lastChild.lastChild.lastChild.appendChild(document.createElement("ul"));
         var section = i1 + "." + i2 + "." + i3 + "." + i4 + "." + i5;
         node.insertBefore(document.createTextNode(section + " "), node.firstChild);
         node.id = "section" + section;
         toc.lastChild.lastChild.lastChild.lastChild.lastChild.appendChild(document.createElement("li")).appendChild(createLink("#section" + section, node.innerHTML));
      }

      else if (tagName == "h4") {
         ++i4, i5 =0;
         if (i4 == 1) toc.lastChild.lastChild.lastChild.appendChild(document.createElement("ul"));
         var section = i1 + "." + i2 + "." + i3 + "." + i4;
         node.insertBefore(document.createTextNode(section + " "), node.firstChild);
         node.id = "section" + section;
         toc.lastChild.lastChild.lastChild.lastChild.appendChild(document.createElement("li")).appendChild(createLink("#section" + section, node.innerHTML));
      }
      else if (tagName == "h3") {
         ++i3, i4 = 0, i5 =0;
         if (i3 == 1) toc.lastChild.lastChild.appendChild(document.createElement("ul"));
         var section = i1 + "." + i2 + "." + i3;
         node.insertBefore(document.createTextNode(section + " "), node.firstChild);
         node.id = "section" + section;
         toc.lastChild.lastChild.lastChild.appendChild(document.createElement("li")).appendChild(createLink("#section" + section, node.innerHTML));
      }
      else if (tagName == "h2") {
         ++i2, i3 = 0, i4 = 0, i5 =0;
         if (i2 == 1) toc.lastChild.appendChild(document.createElement("ul"));
         var section = i1 + "." + i2 ;
         node.insertBefore(document.createTextNode(section + " "), node.firstChild);
         node.id = "section" + section;
         toc.lastChild.lastChild.appendChild(h2item = document.createElement("li")).appendChild(createLink("#section" + section, node.innerHTML));
      }
      else if (tagName == "h1") {
         ++i1, i2 = 0, i3 = 0, i4 = 0, i5 =0;
         if (i1 == 1) toc.appendChild(document.createElement("ul"));
         var section = i1;
         node.insertBefore(document.createTextNode(section + "  "), node.firstChild);
         node.id = "section" + section;
         toc.lastChild.appendChild(h2item = document.createElement("li")).appendChild(createLink("#section" + section, node.innerHTML));
      }
   }
}

Forfatter til Ubuntuguiden: http://www.vidas.dk/guides/ubuntuguiden.html

Kører LTS udgaverne.

"It's always easy if you know how to do it."
AJenbo
Admin
Indlæg: 20878
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: javascript problem

Indlæg af AJenbo »

Kode: Vælg alt

   var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0;
   toc = toc.appendChild(document.createElement("div").innerHTML = 'Indholdsfortegnelse');
   toc = toc.appendChild(document.createElement("ul"));


Skal lige indrømme at jeg ikke har testet, men jeg kan heller ikke se hvordan du kalder din funktion.
thj01
Indlæg: 2667
Tilmeldt: 21. nov 2006, 10:06
Geografisk sted: Fredericia

Re: javascript problem

Indlæg af thj01 »

Har lige testet ... scriptet dør ...

Starten af htmlfilen ser ud som følger:

Kode: Vælg alt

<html>

<body onload="generateTOC(document.getElementById('toc'));">
   
   <div class="title">Introduktion til Python</div>

   <div class="indhold">Indholdsfortegnelse</div>
   
   <div id="toc"></div>


Det er div'en jeg gerne vil have flyttet ind i scriptet ...
Forfatter til Ubuntuguiden: http://www.vidas.dk/guides/ubuntuguiden.html

Kører LTS udgaverne.

"It's always easy if you know how to do it."
AJenbo
Admin
Indlæg: 20878
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: javascript problem

Indlæg af AJenbo »

Beklager det tog lige lidt tid før jeg fik kigget på den her, du skal blot tilføje følgende kode i starten af generateTOC() funktionen:

Kode: Vælg alt

   var title = document.createElement('div');
   title.appendChild(document.createTextNode('Indholdsfortegnelse'))
   title.className = 'indhold'
   toc.parentNode.insertBefore(title, toc);


Jeg vil råde dig til at bruge et frame work eks. jQuery til at håndtere din DOM manipulation så det ikke bliver så komplekst som det du har pt.
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: javascript problem

Indlæg af lath »

thj01 skrev:Jeg er begyndt at skrive alle mine dokumenter til Linuxundervisning i HTML5, da det giver mig en god skriveproces samtidig med det giver mig fuld kontrol over design og opsætning.
...


Sjovt - jeg har også brugt HTML5 til dokumentation - og af de samme årsager.
Jeg vil som AJenbo også anbefale at bruge jQuery.

På et tidspunkt faldt jeg over AsciiDoc:

AsciiDoc er lige mig.
Jeg vil godt anbefale at du tager et kig på det.

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags