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++; } ****************************************************** ******************************************************
Annonceindlæg fra Lector
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>
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
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; };
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
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!!!\"); }
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;
07. oktober 2001 - 10:19
#7
Thx - det var lige præcis det ;o)
Vi tilbyder markedets bedste kurser inden for webudvikling