Claude: "Domain patterns emerge from iteration, not generation." - Tweakers Time Machine Extension | Chrome : FF
Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.
ChildNodes gaan altijd steeds 1 niveau diep.
Je zal dus een recursieve functie moeten schrijven die steeds een niveau dieper "graaft".
Zoiets als:
1
2
3
4
5
6
7
8
| function changeChildNames(obj) { if ( !obj.childNodes || !obj.childNodes.length ) return false; for ( var i = 0; i < obj.childNodes.length; i++ ) { obj.childNodes[i].name = 'nieuwenaam'; changeChildNames(obj.childNodes[i]); } return true; } |
Zoiets denk ik. Is uit de losse pols ... dus gaat vast iets mee mis ... maar het idee zal duidelijk zijn.
Claude: "Domain patterns emerge from iteration, not generation." - Tweakers Time Machine Extension | Chrome : FF
Want mijn script komt zo in een oneindige loop terecht, en mijn browser reageert dan niet meer.
Met deze functie kloon ik een bestaand object:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| function CloneObject() {
counter++;
var Clone = document.getElementById('main').cloneNode(true);
Clone.id = '';
Clone.style.display = 'block';
Clone.border = '1';
//namen veranderen
ChangeName(Clone);
var InsertPoint = document.getElementById('InsertHere');
InsertPoint.appendChild(Clone);
} |
En dit is de functie ChangeName
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| function ChangeName(obj) {
if(!obj.childNodes || !obj.childNodes.length) { //not
return false; }
else {
for(i=1;i < obj.childNodes.length;i++) { //in een loop door de elementen
var GetName = obj.childNodes[i].name;
if(GetName)
obj.childNodes[i].name = GetName + counter;
var GetID = obj.childNodes[i].id;
if(GetID)
obj.childNodes[i].id = GetID + counter;
/* ChangeName(obj.childNodes[i]); */
}
return true;
}
} |
In de bovenstaande gedeelte is een stukje (dat hij zichzelf weer aanroept) nu uitgecomment. Dan kom ik niet in een oneindige loop. Maar dan gaat hij ook maar één childNodes laag diep.
Wat is er fout?
Claude: "Domain patterns emerge from iteration, not generation." - Tweakers Time Machine Extension | Chrome : FF
Je kunt in ieder geval eens extreem basic gaan debuggen door aan het begin van de changename functie een alert te doen van de id en name van het te wijzigen element. Hoe dan ook ziet je functie er niet uit alsof ie eindeloos recursief kan, dus ik ben met name wel benieuwd naar cross-browser reproducability.
[ Voor 53% gewijzigd door ZpAz op 04-01-2007 20:31 ]
Claude: "Domain patterns emerge from iteration, not generation." - Tweakers Time Machine Extension | Chrome : FF
Verwijderd
1
| for(var i=1;i < obj.childNodes.length;i++) |
overigens heb je hier helemaal geen recursie nodig, je kunt ook gewoon alle descendants pakken en daar in één keer overheen itereren:
1
2
3
4
5
6
| var newField = newFields.getElementsByTagName('*'); for (var i=0;i<newField.length;i++) { var theName = newField[i].name if (theName) newField[i].name = theName + counter; } |
[ Voor 71% gewijzigd door Verwijderd op 04-01-2007 21:45 ]
Verwijderd
1
| for(var i=1;i < obj.childNodes.length;i++) |
Ik weet niet of dat je probleem oplost. Ik kan me herinneren dat dit hielp bij mijn recursive menu script ding
Waarom begin je overigens niet bij 0??
//bah heb ik een keer de oplossing ben ik te laat
[ Voor 8% gewijzigd door Verwijderd op 04-01-2007 21:44 ]
var ervoor heeft mijn probleem opgelostVerwijderd schreef op donderdag 04 januari 2007 @ 21:44:
Je moet in iig in de for loop var zetten voor de i dus
JavaScript:
1 for(var i=1;i < obj.childNodes.length;i++)
Ik weet niet of dat je probleem oplost. Ik kan me herinneren dat dit hielp bij mijn recursive menu script ding
Waarom begin je overigens niet bij 0??
//bah heb ik een keer de oplossing ben ik te laat
Claude: "Domain patterns emerge from iteration, not generation." - Tweakers Time Machine Extension | Chrome : FF
In dit geval zou ik echter nog eens goed naar de tip van Blues kijken
Intentionally left blank