Avatar billede christofferhped Nybegynder
20. november 2007 - 17:16 Der er 8 kommentarer og
1 løsning

IE innerhtml bug?

Hejsa.

Jeg prøver at indsætte en helt tabel med innerHTML.

Jeg har <span id="container"></span> og bruger følgende kode:

documenet.getElementById('container').innerHTML = '<table id="Information"><tr><td id="Type"></td><td><a href="" title="">Detaljer</a></td></tr><tr><td><b>Kommentar:</b></td><td>Hejsa</td></tr></table>';

I FF bliver mit stylesheet appliet til det nyeligt indsatte stykke HTML - i IE sætter den det bare ind - uden at stille det op som et tabel heller. Fandme underligt.

Mvh

Christoffer
Avatar billede w13 Novice
20. november 2007 - 19:10 #1
innerHTML er i sig selv en bug. =) Det har aldrig nogensinde været valid kode, og det er i øvrigt fyldt med fejl. Det er kun et tilfælde at de fleste browsere understøtter det nogenlunde.

Når du skal sætte elementer ind, bør du gøre det med DOM (Document Object Model), ref. http://www.w3.org/TR/DOM-Level-3-Core/core.html

Eksempel på indsættelse af table:
-------------------------------------
var newElement=document.createElement("table");
newElement.setAttribute("id","information");

newElement.appendChild(document.createElement("tbody"));

newElement.getElementsByTagName("tbody")[0].appendChild(document.createElement("tr"));

newElement.getElementsByTagName("tr")[0].appendChild(document.createElement("td"));

newElement.getElementsByTagName("td")[0].setAttribute("id","type");

newElement.getElementsByTagName("td")[0].appendChild(document.createTextNode("Hello world!"));

document.getElementById("container").appendChild(newElement);
-------------------------------------
På denne måde opretter og redigerer du koden element for element. Det fylder mere, men det er meget bedre. Og browserne er meget gladere for det. innerHTML er noget værre skidt. =)
Avatar billede w13 Novice
20. november 2007 - 19:26 #2
Et lidt simplere eksempel, hvis du ikke kender noget til DOM:
------------------------------------------------
document.getElementById("container").appendChild(document.createTextNode("Hello world!"));
------------------------------------------------
Denne kode opretter en ny tekstdel i "container".

Og en lidt mere avanceret:
------------------------------------------------
var newElement=document.createElement("div");
newElement.appendChild(document.createTextNode("Hello"));
newElement.appendChild(document.createElement("br"));
newElement.appendChild(document.createTextNode("world!"));

document.getElementById("container").appendChild(newElement);
------------------------------------------------
Først oprettes et nyt div-element (altså et "<div></div>") i variablen "newElement". Elementet kan derfor ikke ses på siden endnu.
Så oprettes teksten "Hello" som et child (underelement) til newElement (div'en).
Så oprettes et <br>-tag som et child til newElement.
Og så oprettes teksten "world!" som et child til newElement.
Til sidst indsættes newElement som et child til "container".

"appendChild" indsætter altid som det sidste underelement, dvs. nederst i parent-elementet.
Avatar billede christofferhped Nybegynder
20. november 2007 - 21:13 #3
Haha :) Alright - helt spadser er jeg dog ikke - havde overvejet den metode der, var ikke klar over at innerHTML var så ... bugget?

Tak for hjælpen. I deler vel bare points?
Avatar billede w13 Novice
20. november 2007 - 21:51 #4
Vi er kun én, så det kan vi godt sige! :P
Avatar billede roenving Novice
20. november 2007 - 22:38 #5
-- og det hører vel med til historien, at et inline-element som en span jo er, ikke må indeholde block-level-elementer som f.eks. tables !-)
Avatar billede w13 Novice
20. november 2007 - 22:56 #6
Åh ja, det er også lidt halvvigtigt. =) Troede det var et div-element.
Avatar billede christofferhped Nybegynder
21. november 2007 - 16:30 #7
Alright :D
Avatar billede christofferhped Nybegynder
22. november 2007 - 14:22 #8
Mystisk!

Nu virker det i IE7 - har ikke ændret noget kode siden i går... Måske noget cache?
Avatar billede w13 Novice
22. november 2007 - 15:38 #9
Muligvis. =) Men det er jo kun godt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester