Avatar billede soerenlyn Nybegynder
31. oktober 2007 - 16:33 Der er 9 kommentarer og
1 løsning

God document.all ?

Hej Eksperter.

Jeg vil gerne gennemløbe alle elementer på min side. Jeg har bakset lidt med nogle ChildNodes også noget rekursivt kald, men det virker ikke helt..
Så opdagede jeg at document.all indeholder alle elementer på siden, og man derfor kunne gennemløbe den i stedet. Dog ved jeg også at document.all er en gammel kode, og den vidst slet ikke virker i FF.

Findes der en ny moderne crossbrowser kode som gør det samme som document.all, eller er der nogen der har en kode der gennemløber alle elementer?

Venlig Hilsen
Søren Lyn
Avatar billede soerenlyn Nybegynder
31. oktober 2007 - 16:37 #1
Jeg har også prøvet at lave min egen funktion hvor jeg bruger arrays, men koden .concat() virker ikke. Den tilføjer ikke den nye liste på den gamle.

function appendHelp(a){
    var aElms=a;
    var aElmChildren=new Array();
    var aAllChildren=new Array();

    for(i=0;i<aElms.length;i++){
        if(aElms[i].hasChildNodes()){
            aElmChildren=aElms[i].childNodes;
            aAllChildren.concat(aElmChildren);  <--- Problemet
        }
    }
    appendHelp(aAllChildren);
}
Avatar billede soerenlyn Nybegynder
31. oktober 2007 - 16:53 #2
Jeg har fået løst concat-problemet, men det giver en anden js-fejl.

Så jeg søger stadig hjælp :)
Avatar billede soerenlyn Nybegynder
31. oktober 2007 - 17:40 #3
Okay concat virker ikke.

Jeg har et element i et array. Dette har en outerHTML.

Så har jeg et andet array, hvor jeg concat'er det første array på. Så hvis jeg alerter det første element i det nye arrays outerHTML, er den undefined :S:S

Jeg føler mig lidt alene i denne tråd, så jeg håber nogen kan hjælpe :P
Avatar billede soerenlyn Nybegynder
31. oktober 2007 - 18:15 #4
Jeg har selv fundet ud af det :)
Avatar billede erikjacobsen Ekspert
31. oktober 2007 - 19:43 #5
Et alternativ er getElementsByTagName ( http://developer.mozilla.org/en/docs/DOM:document.getElementsByTagName ), i det tilfælde dem man vil have, tilfældigvis bruger samme tag fx <span> .
Avatar billede w13 Novice
01. november 2007 - 01:39 #6
Hvad fandt du ud af Soerenlyn?

Umiddelbart ser det ud til, at getElementsByTagName("*") vælger alle tags og fungerer i de største browsere... Ved dog ikke, om det er validt. =)
Avatar billede soerenlyn Nybegynder
01. november 2007 - 10:27 #7
Jeg har valgt den løsning Hr. w13 :P
Avatar billede olebole Juniormester
01. november 2007 - 14:55 #8
<ole>

getElementsByTagName("*") er helt valid - og ligeså dårlig som document.all  :)

Man kan uden tvivl lave en mere specifik/direkte (og dermed bedre) søgning. Kan man ikke det, vil jeg mene, du har problemer med strukturen i din kode.

Hvis man f.eks. ønsker at finde alle danske, rødhårede bøsser mellem 30 og 34 år, der tygger skrå, er vilde med Motorhead og går i Vans sko, er det ikke hensigtsmæssigt at indkalde _alle_ danske mænd og derefter filtrere dem.
En stor del af filtreringen må kunne ske inden indkaldelsen  ;o)

/mvh
</bole>
Avatar billede soerenlyn Nybegynder
01. november 2007 - 16:42 #9
Jeg er ikke sikker på hvordan jeg skulle sortere dem fra, i og med jeg ikke vil begrænse mig til kun at måtte bruge nogle bestemte tags.. :)
Avatar billede roenving Novice
03. november 2007 - 15:08 #10
Et eksempel på et rekursivt kald, der finder bestemte noder:

var txts = [];
window.onload = function(){
  var rootElm = window.documentElement?window.documentElement : document.body;
  txts = testChilds(rootElm,txts);
  alert(txts[0].nodeValue);
}
function testChilds(elm,txts){
  var elms = elm.childNodes;
  for(var i=0,im=elms.length;im>i;i++){
    switch(elms[i].nodeType){
      case 1:
        txts = testChilds(elms[i],txts);
        break;
      case 3:
        if(elms[i].nodeValue && elms[i].nodeValue.length > 1)
          txts.push(elms[i]);
        break;
      default:
    }
  }
  return txts;
}

-- det er lavet for at vise, hvordan man finder tekst-noder, men rekursionen må du kunne bruge !-)
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