Avatar billede mclemens Nybegynder
24. marts 2006 - 19:44 Der er 12 kommentarer og
2 løsninger

JSDOM håndtering - Er jeg på rette spor?

Jeg er ved at aflive min innerHTML :P og forsøger på at skifte over til dom metoder som anbefalet af roenving...


1. - Er jeg på rette kurs
eller er det her bare en anden forkert måde at få fat
i innerHTML'en?

2. - Er det hurtigere end innerHTML eller

1 & 2: 10 point stykket x 5 svar



3. - Er der en nemmere måde at løbe gennem indholdet hvis man ikke kender strukturen og har brug for struktur, tags m.v. når man senere i scriptet skal lege med append og remove?
3: 100 point x 1 svar

Her er mit script:
(startpunkt p.t. sat til id abc)
... har brugt info fra denne ene side http://developer.mozilla.org/en/docs/Traversing_an_HTML_table_with_JavaScript_and_DOM_Interfaces for at lave nedenstående samt min basis javascript viden :P



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<head>

<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>Ingen titel</title>

<script type="text/javascript">
<!--

/*window.onload=*/

function domrun(){lvl=0;
current0=document.getElementById("abc");
for(runit=0;runit<current0.childNodes.length;runit++){
  currenttmp=current0.childNodes.item(runit);
  if(0!=currenttmp.childNodes.length)runchilds(currenttmp);
  else currentdomhandle(currenttmp);
}
}

function runchilds(currenttmp){lvl++;
eval("current"+lvl+"=currenttmp;"+
"for(runit"+lvl+"=0;runit"+lvl+"<current"+lvl+".childNodes.length;runit"+lvl+"++){"+
  "currenttmp=current"+lvl+".childNodes.item(runit"+lvl+");"+
  "if(0!=currenttmp.childNodes.length)runchilds(currenttmp);"+
  "else currentdomhandle(currenttmp);"+
  "}");
  lvl--;
}


function currentdomhandle(currenttmp){
eval("tmpparent=current"+lvl+";");
alert("Følgende object er fundet:\n\nTagName:"+tmpparent.nodeName+"\n\nId:"+tmpparent.id+"\n\nName:"+tmpparent.name+"\n\nIndhold:\n"+currenttmp.data);
}

//-->
</script>
</head>

<body>
<div id="abc" name="test" onclick="alert(this.Type);">gdifhgf ghtey<p id="dette id">abc<b>ada</b></p>asdd </div>
</body></html>
Avatar billede mclemens Nybegynder
24. marts 2006 - 19:46 #1
hov, erstat lige
/*window.onload=*/

function domrun(){lvl=0;

med:

window.onload=function domrun(){lvl=0;

... glemte at jeg havde deaktiveret den :P
Avatar billede mclemens Nybegynder
24. marts 2006 - 20:17 #2
P.s.: Kender godt getElementsByTagName, men da det skal virke uafhængig af strukturen og scriptet skal kunne bearbejde/overvåge og tilføje slette baseret på strukturen, kan jeg ikke se, hvordan den skulle kunne benyttes.
(ved godt der er fejl i den onclick :P )
Avatar billede mclemens Nybegynder
25. marts 2006 - 00:11 #3
Nedenstående kunne misforståes, så man tror det var 20 point
... det burde det nok have været, men man kan ikke øge point nu :/
(1 & 2 behøver ikke nødvendigvis at være lange forklaringer)

1 & 2: 10 point stykket x 5 svar => (nr1+nr2)=10point*5svar
Avatar billede roenving Novice
25. marts 2006 - 13:53 #4
Tjah, noget af vejen er du da ved at finde ...

-- men en opgave, der i sin natur er rekursiv kalder jo ligefrem på en rekursiv løsning, selv om det kan være svært at holde hovedet koldt med sådanne !o]

-- og så er eval en af de dyreste funktioner performancemæssigt overhovedet i javascript (bl.a. fordi den skal tage højde for den type brug, du har gang i !-)

-- og så kan du sikkert få meget ud af at undersøge nodeType i stedet for den lidt klumpede childNodes-metode, du bruger:

nodeType returnerer:

1 for et html-element-node
2 for en attribut-node
3 for en tekst-node
8 for en kommentar-node (Comment-node) og
9 for en document-node
Avatar billede mclemens Nybegynder
25. marts 2006 - 15:46 #5
Tak for tippet og feedback.
Svar? Giver 20 point istedet, regner med jeg godt må udvide pointene...
- Hvis der kommer et script fra en laver jeg tillægsspørgsmål til
overførsel af de 50 point, der kommer til at mangle i tråden...


-- men en opgave, der i sin natur er rekursiv kalder jo...
- Ja, det var også lige om at hovedet koldt, da
den skulle løbe sig selv i rundkreds...


-- og så er eval en af de dyreste funktioner performancemæssigt ...
- Ja, det tænkte jeg nok.
... Kan dog ikke se en anden løsning p.t.. Prøvede med seperat kaldende function, men for at have lvl dybden samt nodenr i de individuelle variabler, var det enten et uendeligt langt js(tror jeg nok) eller en function, der kunne dykke ned i strukturen... ved ikke om der noget bedre en eval til lave et "dykkende" script :/

-- og så kan du sikkert få meget ud af at undersøge nodeType...
- tjekker lige den ud :)


nodeType returnerer:

1 for et html-element-node
2 for en attribut-node
3 for en tekst-node
8 for en kommentar-node (Comment-node) og
9 for en document-node
Avatar billede roenving Novice
03. april 2006 - 18:36 #6
Fidusen i ægte rekursive funktioner er at overføre data, for en instans af den samme funktion har som udgangspunkt private variable, hvilket vil sige, at man uden problemer kan genbruge f.eks. en simpel loop-tæller som i el.

Det simple eksempel er funktionen fakultet, gange alle tal ned til et, altså 6! = 6*5*4*3*2*1 = 720 !-)

function fakultet(num){
  var res = num;
  if(num>2){
    res *= fakultet(--num);
  }
  return res;
}

-- prøv at tygge den igennem, den skulle være simpel nok til, at man kan gøre det på papir, og den viser tydeligt, at man samtidigt kan have mange udgaver af den samme variabel flyvende !o]

-- og så holder det faktisk op at være et problem med lvl-dybden, for du kalder bare funktionen med en-eller-anden level-dybde og kalder evt. videre med den samme inkrementeret ...

-- inkrementere: tælle en op, i javascript og andre bygget på C-familien (feks. også Java !-) variabel++ (tæller efter udførslen) eller ++variabel (tæller før udførslen) ...

Tilsvarende kan man dekrementere, tælle ned: variabel-- eller --variabel !o]
Avatar billede mclemens Nybegynder
03. april 2006 - 18:44 #7
Tak for inputtet roenving lig et svar ;)

Så kaster jeg lige hundrede til
dig og en halvtredser til mig :)

Kan du evt. kigge lidt på denne tråd
regner med du kan rette det... som coadmin...
http://www.eksperten.dk/spm/700019
Avatar billede mclemens Nybegynder
03. april 2006 - 18:56 #8
fik fat i den nu... genialt nok den prøver jeg :)
Avatar billede roenving Novice
03. april 2006 - 22:18 #9
Ha, det går zq da godt !-)

Velbekomme '-)
Avatar billede mclemens Nybegynder
03. april 2006 - 23:41 #10
roenving håber jeg fanger dig her...
kig lige på min forespørgsel til coadmin
det var angående den tråd jeg nævnte se evt.
id 3535 under bruger indrapportering...

- det ville være rart med en oprydning i tråden fra
02/04-2006 23:22:00 ned til: 03/04-2006 01:40:54
Avatar billede mclemens Nybegynder
03. april 2006 - 23:43 #11
... kom vist til at indrapportere mig selv istedet
for tråden, men det er jo første gang jeg prøver på
at indrapportere og jeg tænkte ikke særlig klart
igår... men straks efter jeg havde trykket
på post fortrød jeg egentlig :/
Avatar billede mclemens Nybegynder
03. april 2006 - 23:44 #12
(fortrød ikke indrapporteringen men det jeg skrev i tråden...)
Avatar billede roenving Novice
03. april 2006 - 23:51 #13
Hrm, jeg kan ikke finde ud af noget fra de kilder, du har givet eller coadmin-værktøjerne stiller til rådighed (bortset fra linket til google-cachen !-)

-- og det er ikke med det nuværende system muligt at ændre på indhldet af en tråd, kun muligt at lukke den, og da jeg ikke umiddelbart kan se noget ulovligt (det kan du så evt. forklare mig !-), er der ikke belæg for at lukke tråden uden opfordring fra spørger ...

-- els tak for point ;~}
Avatar billede mclemens Nybegynder
03. april 2006 - 23:58 #14
Det første af de link jeg kom til at poste i 02/04-2006 23:22:00 har nogle kodeord (der måske ikke er helt ok) i sig ... troede det var hans site - ville gerne have det at vide hvis det var for så var jeg ikke helt interesseret i at hjælpe (det var det så ikke... det vi jo på plads til sidst...) ... men, når du siger misforståelsen går an og linkene ikke er et problem så sover jeg roligere :)

-- els tak for point ;~}>
- det var så lidt. Glad for at være herinde man lærer virkeligt noget :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester