Avatar billede plazm Nybegynder
20. maj 2006 - 13:14 Der er 13 kommentarer og
1 løsning

Hente alle noder i et træ.

Hej.

Jeg sidder og er ved at lave en rekursiv function der skal løbe alle noder under en bestemt node igennem, og hvis det er en tekstnode, så skal man kunne behandle teksten.

Scriptet skal KUN virke i Firefox, da det er til et plugin.

Jeg er kommet frem til følgende, men det virker ikke

function rf(elm) {
  e = elm.childNodes;
  for(a=0;a<e.length;a++) {
    if (e[a].childNodes.length > 1) {
      rf(e[a]);
    } else {
// min tekstbehandling
    }
  }
}
Avatar billede olebole Juniormester
20. maj 2006 - 14:41 #1
<ole>

1) Hvad betyder: "Virker ikke"?
2) Hvad havde du forventet skulle ske?
3) Hvad sker?
4) Hvad sker ikke?

/mvh
</bole>
Avatar billede olebole Juniormester
20. maj 2006 - 14:42 #2
- og får du fejl?
Avatar billede plazm Nybegynder
20. maj 2006 - 14:51 #3
1: Det kørte rf() nogle gange den ikke burde
2: Jeg forventede at det løb alle childNodes samt deres childNodes osv.. gennem indtil at jeg stod med et textNode element
3: Der sker noget jeg ikk selv er klar over hvorfor sker.
4: Scriptet finder ikke nogle textnodes

Jeg kan se jeg har delvist dummet mig i det script. Jeg har forsøgt at ændre
if (e[a].childNodes.length > 1) {
til noget der skulle udelukke IMG, BR og lign tags fra at sætte den rekursive funktion igang, men det lykkedes ikke.

Forstår du nu hvad det er scriptet skal?
Avatar billede olebole Juniormester
20. maj 2006 - 15:04 #4
Mon ikke problemet opstår, fordi FF regner al white-space mellem HTML-tags som tekstnoder?
Avatar billede plazm Nybegynder
20. maj 2006 - 15:07 #5
jo, men det burde da ikke gøre noget, i det jeg vil have fat i tekstnoderne. Også whitespaces(ikke at de skal bruges til noget)
Avatar billede olebole Juniormester
20. maj 2006 - 15:08 #6
I FF kan man ikke teste, om et element kan have 'børn' eller ej - og da dens DOM-håndtering er noget nær katastrofal, kan man ikke engang teste på, om man selv kan indsætte et element i det (i en try/catch, selvfølgelig). Det kan man nemlig altid i FF, da den intet validerer. F.eks. kan du sætte et billede eller en tabel ind i et input-element ... skooooooooooooooooooood!  :o|
Avatar billede olebole Juniormester
20. maj 2006 - 15:10 #7
Nej, du vil da formodentlig ikke have tekstnoderne med:

<tr> [HER]
<td>jkhkjhkjh</td> [HER]
</tr> [HER]
Avatar billede plazm Nybegynder
20. maj 2006 - 15:16 #8
tja, om jeg fik dem med ville intet gøre :) da jeg laver et tjek på indholdet.
Avatar billede olebole Juniormester
20. maj 2006 - 15:18 #9
Jamen, så forstår jeg stadig ikke, hvad problemet er  :)
Avatar billede plazm Nybegynder
20. maj 2006 - 15:23 #10
det er der galt er at jeg ikk kan få funktionen til at løbe til ende.
jeg overser et eller andet...
Avatar billede olebole Juniormester
20. maj 2006 - 15:23 #11
Er det de tags, der ikke kan have børn, der er problemet? I så fald må du oprette et hash-table og spørge på det:

var oCantHaveKids = {
  "br":1,
  "img":1,
  "input":1
};

Så kan du spørge med:

if ( oCantHaveKids[NODE.nodeName.toLowerCase()] ) {
    // Kan ikke have 'børn'
}
Avatar billede plazm Nybegynder
20. maj 2006 - 16:04 #12
Argh, jeg har lige fundet ud af at den side som jeg parser også indeholder noget være slamkode, hvilket er skyld i at jeg ikk kan parse det ordentligt.. Hvornår har man sidst kunnet gøre sådan her:
<td></th><td></td>

smid et svar, for din hjælp
Avatar billede olebole Juniormester
20. maj 2006 - 16:09 #13
Min mund er lukket  :D
Avatar billede olebole Juniormester
20. maj 2006 - 16:49 #14
Tak for points  ;o)
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