[javascript] geen goede loop

Pagina: 1
Acties:

  • napauleon
  • Registratie: Juni 2002
  • Laatst online: 15-04-2021
Ik heb hier een deel van mijn javascript code xml inhoud maakt/aanpast van een xml bestand

var teller2 = document.forms['delete'].drop_down_parent.selectedIndex;
var obj = xmlDoc.documentElement.childNodes.item(teller2).childNodes.item(teller);
while (obj.childNodes.item(teller) != obj.childNodes.lastChild)
{
child_fill.options[teller] = new Option(""+obj.childNodes.item(teller).nodeValue);
teller = teller+1;
}

dit zorgt ervoor dat een option box gevuld wordt met nodes, totdat hij bij de laatste node komt. Ik heb bijvoorbeeld 5 nodes die daar ingevoegd moeten worden, maar alleen de eerste wordt ingevoegd. Dat terwijl de teller wel goed staat, dus plaats 0 vult hij, maar daarna gaat hij niet naar plaats 1 .

Ergens anders in het script heb ik een soortgelijk iets, maar dan met nodes die direct onder het element liggen. Waar het nu over gaat zijn textnodes die onder die andere nodes liggen.

De teksten die in de array moeten komen zitten allemaal in een zelfde node:

<title>troy</title>
<title>van helsing</title>

Hij zet dan dus alleen de tekst "troy" in de array
Hoe kan het dat alleen de eerste node gevuld wordt?

[ Voor 11% gewijzigd door napauleon op 24-05-2004 14:17 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 00:33

André

Analytics dude

Heb je ook het volledige script?

  • napauleon
  • Registratie: Juni 2002
  • Laatst online: 15-04-2021
ja, maar dat is een behoorlijke flame als ik dat hier ga posten.
Ik kan hem wel naar je mailen ofzo?
Kun je meteen meer kritiek geven :)

Verwijderd

code:
1
2
3
4
while (obj.childNodes.item(teller) != obj.childNodes.lastChild)
moet zijn:
while (obj.childNodes.item(teller) != obj.lastChild)
?

  • napauleon
  • Registratie: Juni 2002
  • Laatst online: 15-04-2021
in dat andere gedeelte waar ik dat ook gebruik heb ik dit:

while (xmlDoc.documentElement.childNodes.item(i) != xmlDoc.documentElement.childNodes.lastChild)

Dat werkt correct. Dus zou ik het zo goed moeten hebben

Verwijderd

napauleon schreef op 24 mei 2004 @ 14:31:
in dat andere gedeelte waar ik dat ook gebruik heb ik dit:

while (xmlDoc.documentElement.childNodes.item(i) != xmlDoc.documentElement.childNodes.lastChild)

Dat werkt correct. Dus zou ik het zo goed moeten hebben
Hoe kan dit nou werken? Je vergelijkt het ne kind van een Node met de property lastChild van een NodeList (.childNodes - die die property helemaal niet heeft)...

Als dit al werkt dan kan het volgens mij alleen per ongeluk zijn, maar ik kan het natuurlijk mis hebben.

Dit is volgens mij hoe dat childNodes/lastChild gedoe werkt:
Java:
1
2
3
4
var i = Node.childNodes.length;
var a = Node.childNodes.item(i-1);
var b = Node.lastChild;
alert(a == b); // true

  • napauleon
  • Registratie: Juni 2002
  • Laatst online: 15-04-2021
mijn doel met dat lastChild gebeuren is om geen foutmelding te krijgen dat de teller bij een punt komt waar niets te vinden is.

als ik dit gebruik:

Java:
1
while (xmlDoc.documentElement.childNodes.item(i) != xmlDoc.documentElement.childNodes.lastChild)

dan wordt de laatste nog meegeteld. En als ik dit doe:

Java:
1
while (xmlDoc.documentElement.childNodes.item(i) != xmlDoc.documentElement.lastChild)


dan wordt de laatste niet meer meegepakt. Dat tweede is logisch. Het eerste werkt wel. Hij pakt alle nodes en stopt dan, maar is niet logisch :S

update:

als ik dit doe dan geeft hij de eerste nodetekst weer.
code:
1
alert(obj.lastChild.nodeValue);


Ik denk dat hij probelemen geeft met het feit dat ik verschillende teksten uit dezelfde node namen wil halen.

[ Voor 22% gewijzigd door napauleon op 24-05-2004 15:07 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:46

crisp

Devver

Pixelated

voor de loop lijkt me zoiets logischer:

JavaScript:
1
2
3
4
5
6
var obj = xmlDoc.documentElement.childNodes.item(teller2).childNodes, teller = 0, totaal = obj.length;
while (teller < totaal) 
{
  child_fill.options[teller] = new Option(''+obj.item(teller).nodeValue);
  teller++;
}

Intentionally left blank


  • w3news
  • Registratie: Mei 2004
  • Laatst online: 09-03 10:15
ga eerst de langte zoeken door length.
obj.childNodes.length en sla dit op in een var.
dan maak je loop die tot deze gaat, en klaar :)
gewoon met for is makkelijkst natuurlijk.

for(var a=0; a<aantal; a++)
{
...
}

kijk anders even hier naar: http://www.w3news.org/script/ziekenhuis.js
(staat trouwens in hoe gaat met Moz en IE)

Een beter internet begint bij jezelf...


  • w3news
  • Registratie: Mei 2004
  • Laatst online: 09-03 10:15
napauleon schreef op 24 mei 2004 @ 14:22:
ja, maar dat is een behoorlijke flame als ik dat hier ga posten.
Ik kan hem wel naar je mailen ofzo?
Kun je meteen meer kritiek geven :)
Mijn source is ook niet perfect, kom binnenkort wel weer een compleet nieuwe versie hoor van mijn site.

Een beter internet begint bij jezelf...

Pagina: 1