Avatar billede herchin Nybegynder
06. oktober 2001 - 15:06 Der er 6 kommentarer og
1 løsning

Gennemløb af alle childs

Nedenstående while-løkke løber alle childs igennem, men ikke child\'s child o.s.v.

Her er problemet, at \'conditionObjectID\' kan ligge inde i andre tags, hvilket gør, at løkken aldrig finder objektet.

Hvordan laver man en løkke, der parser alle childtags igennem???

******************************************************
******************************************************

while (!found && i <= oEdit.children.length - 1) {
  if (oEdit.children[i].id == conditionObjectID.value) {
    found = true;
  }
  i++;
}

******************************************************
******************************************************
Avatar billede olebole Juniormester
06. oktober 2001 - 19:20 #1
<ole>
Det er slet ikke sikkert, det er metoden  ;o)
Prøv at vise noget kode og forklare, hvad du vil finde - hvor og hvorfor.
/mvh
</bole>
Avatar billede jakoba Nybegynder
06. oktober 2001 - 19:31 #2
Pas på. Det kan gøres, men det kan være det tager en uacceptabelt lang tid.


var foundObj;

function rekursiv ( elm ) {
    if ( elm.id == conditionObjectID.value ) {
        foundObj=elm.children[i];
        return true;
    }
    for (var i=elm.children.length-1; i>=0; i-- )
        if ( rekursiv( elm.children[i]) ) return true;
};

if ( rekursiv( oEdit ) ) {
    // så kan værdien i foundObj bruges.
};

mvh JakobA
Avatar billede jakoba Nybegynder
06. oktober 2001 - 19:35 #3
Ups. der skal være en return false nederst i funktionen:

function rekursiv ( elm ) {
    if ( elm.id == conditionObjectID.value ) {
        foundObj=elm.children[i];
        return true;
    }
    for (var i=elm.children.length-1; i>=0; i-- )
        if ( rekursiv( elm.children[i]) ) return true;
    return false;
};
Avatar billede jakoba Nybegynder
06. oktober 2001 - 23:09 #4
og en til fejl (satte foundObj forkert). Samler lige rettelserne:

var foundObj;

function rekursiv ( elm ) {
    if ( elm.id == conditionObjectID.value ) {
        foundObj=elm;           
        return true;
    }
    for (var i=elm.children.length-1; i>=0; i-- )
        if ( rekursiv( elm.children[i]) ) return true;
    return false;
};

if ( rekursiv( oEdit ) ) {
    // så kan værdien i foundObj bruges.
};

mvh JakobA
Avatar billede herchin Nybegynder
06. oktober 2001 - 23:23 #5
Jeg kan godt se meningen med at lave en rekursiv funktion og jeg har også forsøgt, men den her virker ikke helt efter meningen ;o(
Jeg får stack overflow!

function saveCondition() {
  //pre: True
  //post: Gemmer data i betingelsen

  function findElement(element) {
    if (element.id == oConditionObjectID.value) {
      element.value = oConditionValue.value;
      element.operator = oConditionOperator[oConditionOperator.selectedIndex].value;
      element.text = oConditionText.innerHTML; */
      return true;
    }
   
    for (var i = 0; i <= element.children.length - 1; i++)
      if (findElement(element)) return true;

    return false;
  }

  if (findElement(oEdit)) alert(\"Betingelsen er gemt!\")
  else alert(\"Fejl!!!\");
}
Avatar billede jakoba Nybegynder
07. oktober 2001 - 00:01 #6
Det lyder sandsynligt dit rekursive kald er jo med præcis samme parameter som funktionen selv blev kaldt med :)
if sætningen i for løkken skal ændres til;

      if (findElement(element.children[i])) return true;
Avatar billede herchin Nybegynder
07. oktober 2001 - 10:19 #7
Thx - det var lige præcis det ;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