FireFox 'corrigeert' DOM?

Pagina: 1
Acties:

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
Ik heb een scriptje gemaakt dat dynamisch formpjes toevoegd, ik heb het nu zo gedaan dat er een lege div met een id in de body staat, die wordt gevuld, en op het einde weer een nieuwe lege div wordt neergezet die dan weer met een eventuele volgende gevuld kan worden.

Dit is het script:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function insertForm() {
    itemCount[formAmount] = formAmount;
    formCount[formAmount] = "form" + formAmount;
    nextFormCount[formAmount] = "form" + (formAmount + 1);
    vraagCount[formAmount] = "vraag" + formAmount;
    veldCount[formAmount] = "veld" + formAmount;
    levelCount[formAmount] = "level" + formAmount;
    tekstCount[formAmount] = "tekst" + formAmount;
    var elementAdder = "";
    if (document.getElementById(nextFormCount[formAmount]) == null) {
        elementAdder = "</div><div id=\"" + nextFormCount[formAmount] + "\">";
    }
    document.getElementById(formCount[formAmount]).innerHTML = "<form id=\"" + itemCount[formAmount] + "\">Vraag: <textarea cols=\"12\" rows=\"1\" id=\"" + vraagCount[formAmount] + "\"></textarea>&nbsp;Veld: <textarea cols=\"12\" rows=\"1\" id=\"" + veldCount[formAmount] + "\"></textarea>&nbsp<SELECT id=\"" + levelCount[formAmount] + "\"><Option value=\"1\">Level 1<Option value=\"2\"> Level 2<Option value=\"3\"> Level 3<Option value=\"4\"> Level 4<Option value=\"5\"> Level 5</SELECT>&nbsp;<br><textarea cols=\"75\" rows=\"5\" id=\"" + tekstCount[formAmount] + "\"></textarea><br><table width=\"600\"><tr><td width=\"60\"><div align=\"left\"><input type=\"reset\" name=\"wissen\" value=\"Schonen\"></div></td><td><div align=\"right\"><input type=\"button\" name=\"wissen\" value=\"Naar boven\" onClick=\"switchUp(this.form.id)\"></div></td><td width=\"60\"><div align=\"left\"><input type=\"button\" name=\"wissen\" value=\"Naar onderen\" onClick=\"switchDown(this.form.id)\"></div></td><td width=\"60\"><div align=\"right\"><input type=\"button\" name=\"wissen\" value=\"Verwijderen\" onClick=\"removeForm(this.form.id)\"></div></td></tr></table></form>" + elementAdder;
    setFormAmount(1);
}


Dit is het stukje in de body waar naar verwezen wordt:

HTML:
1
<div id="form0"></div>


Dan verwacht ik dat na de functie insertForm als elementAdder er aan wordt geplakt het er zo uit ziet:

HTML:
1
<div id="form1">een hoop form gedoe</div><div id="form2"></div>


Maar het wordt dit:

HTML:
1
<div id="form1">een hoop form gedoe<div id="form2"></div></div>


Net alsof FireFox denkt dat ik de boel loop te vernaggelen, en vervolgens maar een </div> verwijdert en op het einde neer zet.

iOS developer


  • RM-rf
  • Registratie: September 2000
  • Laatst online: 23:35

RM-rf

1 2 3 4 5 7 6 8 9

ja als je via innerHTML werkt, is dat een hele leijke methode,

je kunt innerHTML niet gebruiken om het bestaande element opeens 'op te breken' ..

dus iets als
code:
1
2
3
4
5
<div id="elm"></div>

<script>
document.getElementById( 'elm' ).innerHTML = "</div><div id=\"newElm\">"
</script>

werkt niet zoals jij denkt ... ipv dat er nu twee elementen op hetzelfde niveau staan, wordt enkel een nieuw elemnet toegevoegd als 'child van 'elm'
overigens juist omdat je via innerHTML _niet_ het DOM zelf mag aanpassen, het is enkel een stringgebaseerd functie die hooguit de inhoud van elementen mag aanpassen, de aangesproken elementen niet zomaar mag opdelen ..

volgens mij kun je in dit geval beter net met createElement() werken ..

overigens, doet explorer dit dan wel? dat is enorm 'huuu' ...

[ Voor 14% gewijzigd door RM-rf op 11-03-2005 12:41 ]

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


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

André

Analytics dude

Dat komt omdat je alles inclusief de elementAdder als innerHTML plaatst.

/edit:
Zoals RM-rf als zegt dus.

[ Voor 22% gewijzigd door André op 11-03-2005 12:41 ]


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 07:58
Met innerHTML een divje in tweeën splitsen lijkt mij eerlijk gezegd ook geen wenselijk gedrag (van de innerHTML bedoel ik hier. Als je in de volgende code de innerHTML van #foo wilt weten dan verwacht je ook dat je "foo" terugkrijgt, en niet "foo</div><div>bar"
HTML:
1
<div id="foo">foo</div><div>bar</div>


Om je probleem op te lossen kun je waarschijnlijk beter kijken naar de échte DOM-functies. createelement() and the like.

/spuit 12

[ Voor 12% gewijzigd door T-MOB op 11-03-2005 12:44 ]

Regeren is vooruitschuiven


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
Hoe zorg ik er voor dat createelement() iets na mijn laatste div er in zet?

------------

Gevonden.

[ Voor 17% gewijzigd door BikkelZ op 11-03-2005 13:31 ]

iOS developer


  • PolarBear
  • Registratie: Februari 2001
  • Niet online
Deel het met ons ;)

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

ach, als je een heeeel klein beetje moeite doet met zoeken, vind je het zo hoor ;)

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.


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
Het is lastiger om hem er *niet* achter te krijgen volgens mij :)

Tegel bij mij op de WC:

"Al prutsende leert men!"

iOS developer

Pagina: 1