[JS]IE7&8 pikken styling createElement niet op

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • PeaceNlove
  • Registratie: Juni 2004
  • Laatst online: 16:02
1e keer hier, heb de regels doorgelezen en volgens mij voldoe ik er aan.

Het probleem: ik ben momenteel bezig met een website die gaat draaien op een server die geen scripting ondersteund. Ik doe daarom alles met HTML, CSS, Javascript en XML. Op een bepaalde pagina moet een extra DIV komen om daarin wat specifieke content te stoppen.

Nu heb ik als code
code:
1
2
3
4
5
6
maakdiv = document.createElement("div"); //maakt div
maakdiv.setAttribute("id","map"); // geeft de div een id
maakdiv.setAttribute("class","test"); //geeft de div een class voor de CSS
maakdiv.setAttribute("style","position:absolute; width: 600px; height: 600px; top: 75px; left: 25px; border: medium double rgb (250,0,255);"); //hier geef ik ook de style op
document.getElementById("mainpage").appendChild(maakdiv); //hier gaat het als node een andere div met als id mainpage in
document.getElementById("map").innerHTML = "check"; //en hier wat testcontent voor de zojuist gemaakte div


Opera en FF geven mij dan keurig een div met border en de juiste afmetingen in de div mainpage en daarin de tekst "check", dit zowel met CSS geladen uit een .css als met maakdiv.setAttribute("style","...");
IE 7 en 8 slaan de complete opmaak over en geven me direct in div mainpage de tekst check

Wat doet IE hier fout en hoe kan ik IE wel zover krijgen de CSS toe te passen?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

voor IE (<8): setAttribute('className')

of beter gewoon element.className = 'foo' gebruiken wat in alle browsers consistent is ;)

hetzelfde geldt ws ook voor style; gewoon element.style gebruiken. * crisp snapt niet waarom mensen altijd denken setAttribute() te moeten gebruiken...

[ Voor 38% gewijzigd door crisp op 28-05-2009 12:23 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • PeaceNlove
  • Registratie: Juni 2004
  • Laatst online: 16:02
crisp schreef op donderdag 28 mei 2009 @ 12:22:
voor IE (<8): setAttribute('className')

of beter gewoon element.className = 'foo' gebruiken wat in alle browsers consistent is ;)

hetzelfde geldt ws ook voor style; gewoon element.style gebruiken. * crisp snapt niet waarom mensen altijd denken setAttribute() te moeten gebruiken...
Omdat setAttribute op internet staat :P Ik probeer me er ook maar uit te googlen als beginner

Maar bedankt voor de tips!

en nu werkt het :)

[ Voor 2% gewijzigd door PeaceNlove op 28-05-2009 12:33 . Reden: het werkt ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

Het internet is een cesspool vol bad practises en slechte voorbeelden :P

[ Voor 18% gewijzigd door crisp op 28-05-2009 12:30 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

w3schools en devguru hebben verschillende references waarmee je eenvoudig kunt opzoeken of iets wel of geen onderdeel van een standaard is.

Het probleem met setAttribute is dat het attribute wel wordt gezet, alleen wordt deze niet opnieuw geevalueerd waardoor deze niet de juiste style opneemt. Om diezelfde reden kun je ook niet zomaar een extra script element toevoegen aan je DOM en verwachten dat je de functionaliteit daaruit kunt gebruiken.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28
Niemand_Anders schreef op donderdag 28 mei 2009 @ 13:59:
Om diezelfde reden kun je ook niet zomaar een extra script element toevoegen aan je DOM en verwachten dat je de functionaliteit daaruit kunt gebruiken.
Dat werkt volgens mij prima hoor en is tevens de manier voor JSONP.

[ Voor 4% gewijzigd door Bosmonster op 28-05-2009 14:04 ]

Pagina: 1