[JS] Childnodes opvragen, daarna via for loop verwijderen

Pagina: 1
Acties:
  • 128 views sinds 30-01-2008
  • Reageer

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
Ik heb dit bewuste stukje code:

JavaScript:
1
2
3
4
5
6
7
    var optionsProduct = productPulldown.childNodes;
    alert(optionsProduct.length);
    h = optionsProduct.length;
    for (i=0;h>i;i+=1) {
        alert(i);
        productPulldown.removeChild(optionsProduct[i]);
    }


Bij alert(optionsProduct.length); roept hij dat hij er 8 heeft. Dit komt overeen met het aantal options in de select waar het hier over gaat.
alert(i) loopt door tot 4.

Daarna krijg ik de error (helaas geen FireFox om te debuggen :( ) "Type komt niet overeen" op de regel
JavaScript:
1
productPulldown.removeChild(optionsProduct[i]);


Het is dus net alsof hij de helft doet, en dan niet meer snapt wat hij precies heeft. Hij loopt tenslotte net zo vaak als hij childs heeft.

[ Voor 7% gewijzigd door BikkelZ op 09-06-2005 12:24 ]

iOS developer


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
Eigenlijk wil ik gewoon alle children verwijderen, maar blijkbaar is daar geen directe functie voor?

iOS developer


  • André
  • Registratie: Maart 2002
  • Laatst online: 06-05 11:13

André

Analytics dude

En als je het omgekeerd doet dan?
code:
1
2
3
4
5
6
7
8
var optionsProduct = productPulldown.childNodes;
alert(optionsProduct.length);
h = optionsProduct.length;
for (i = h - 1; i > -1; i--)
{
  alert(i);
  productPulldown.removeChild(optionsProduct[i]);
}

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
Ik had het inderdaad al zelf gevonden.

Op mijn manier maak ik het stapeltje steeds lager, en vraag ik toch steeds een hogere aan in het stapeltje, dus haalt hij de helft maar weg.

Ik heb nu:

JavaScript:
1
productPulldown.removeChild(optionsProduct[0]);


En dat werkt dus perfect.

iOS developer


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 25-02 11:17

Clay

cookie erbij?

Vind het wel logisch dat het na 4 fout gaat. Je hebt er 8, en dan ga je met een for deleten; 0, 1, 2, 3 ... Op het moment dat je option[4] (de 5e) delete zijn er nog maar 4 over, die 5e bestaat dan al niet meer. Je zou dus ook net zo goed n keer option[0] kunnen deleten...

edit:
te laat :( :P

[ Voor 6% gewijzigd door Clay op 09-06-2005 12:33 ]

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
André schreef op donderdag 09 juni 2005 @ 12:26:
En als je het omgekeerd doet dan?
code:
1
2
3
4
5
6
7
8
var optionsProduct = productPulldown.childNodes;
alert(optionsProduct.length);
h = optionsProduct.length;
for (i = h - 1; i > -1; i--)
{
  alert(i);
  productPulldown.removeChild(optionsProduct[i]);
}
Omgekeerd werkt natuurlijk ook goed. Ik had gewoon even in de gaten moeten houden dat bij iedere removeChild de Array zichzelf aanpaste.

iOS developer


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 25-02 11:17

Clay

cookie erbij?

Options van een select kan je trouwens ook deleten door de options.length property op 0 te zetten. 't lijkt me dat dat soort properties alleen getters zouden moeten zijn ;) en het is dus imo ueberranzig, maarja.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Toevoeging op de for-loop:
JavaScript:
1
2
3
while(productPulldown.hasChildNodes()) {
        productPulldown.removeChild(productPulldown.firstChild);
}

Nu met Land Rover Series 3 en Defender 90


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

crisp

Devver

Pixelated

Clay schreef op donderdag 09 juni 2005 @ 12:35:
Options van een select kan je trouwens ook deleten door de options.length property op 0 te zetten. 't lijkt me dat dat soort properties alleen getters zouden moeten zijn ;) en het is dus imo ueberranzig, maarja.
Volgens devedge zou het ook read-only moeten zijn, maar feit is dat het in alle mij bekende browsers gewoon read/write geimplementeerd is...

Intentionally left blank


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
Clay schreef op donderdag 09 juni 2005 @ 12:35:
Options van een select kan je trouwens ook deleten door de options.length property op 0 te zetten. 't lijkt me dat dat soort properties alleen getters zouden moeten zijn ;) en het is dus imo ueberranzig, maarja.
...maar dat pikt 'ie weer niet altijd. Nee, zelfs niet in IE ;)
MTWZZ schreef op donderdag 09 juni 2005 @ 13:07:
Toevoeging op de for-loop:
JavaScript:
1
2
3
while(productPulldown.hasChildNodes()) {
        productPulldown.removeChild(productPulldown.firstChild);
}
Dit is dus dé nette methode om dit te doen volgens mij!

iOS developer


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

crisp

Devver

Pixelated

BikkelZ schreef op donderdag 09 juni 2005 @ 14:51:
[...]


...maar dat pikt 'ie weer niet altijd. Nee, zelfs niet in IE ;)
mwa, ik ben nog niet tegengekomen dat dat niet werkte...
[...]
Dit is dus dé nette methode om dit te doen volgens mij!
true...

Intentionally left blank

Pagina: 1