20. januar 2005 - 17:13Der er
18 kommentarer og 1 løsning
Erstatning for innerHTML
Ohøj
En eller anden overtalte mig til at begynde rent faktisk at servere mine xhtml-sider som xhtml. Det virker ganske fornuftigt og man føler sig en smule stoltere over sit værk.
Men jeg er (som jeg også blev advaret om) løbet ind i et javascript-problem: Jeg bruger innerHTML og det virker ikke i xhtml. Hvad gør jeg så i stedet?
viperine, det er først dukket op efter jeg - som jeg skriver - serverer siderne som xhtml. Dine sider bliver formodentligt serveret som alm. html (i Firefox: højreklik og vælg 'Wiev Page Info', kig under 'Type'). Så længe jeg gør det virker innerHTML også fint. Men browseren er langt mere kritisk når serveren sender dem som ægte xhtml (hvis browseren altså understøtter mime'n application/xhtml+xml - hvilket IE fx. ikke kan finde ud).
"I believe this isn't a bug, it was disabled on purpose.
XHTML documents served as application/xhtml+xml are XML documents, so they have to be well formed in order for the browser to render them. if you could just insert any string in to your document then you introduce the possibility that you'll get a malformed document. so the browser, in order to use innerHTML would have to parse the string as xml, and then append it to the document.
the workaround for this problem is to use createElement() and createElementNS() and node.appendChild() to build your new XHTML and insert it into your document."
Første skridt er nok at opdage at for at siderne bliver tolket som xhtml så skal de også serveres som xhtml. indtil da bliver de bare tolket som alm. html (eftetr sigende ovenikøbet fejlfyldt html).
Jeg er ved at have løst problemet. Skal nok vende tilbage når den er plads.
hehe. din kilde er jo sikkert fin xhtml. den bliver bare ikke serveret som det af serveren. det er ikke noget validatoren tager højde for. den checker kun kilden.
Det ser ikke ud til at der er en direkte ligeværdig funktion når man arbejder med DOM. Så jeg vil ikke komme med en løsning her, da den formodentligt ikke vil passe ind i 99% af de tilfælde man bruger - eller brugte - innerHTML.
Hvis man vil skrive XHTML idag, må man være forberedt på at skrive flere versioner af samme dokument ... noget vi ellers har været rimelig forskånet for siden den store browserkrig. Det er mig en gåde, at folk synes helt vilde for at komme tilbage til det rod - og kun for at skrive i en standard, der endnu ikke er implementeret i brugbar grad.
PS: viperine >> Du kan heller ikke bruge 'document.FORMNAVN.FELTNAVN', 'document.forms[0]', 'document.images' - og flere andre adresseringer, der bygger på ren HTML-DOM. Et ægte XHTML-dokument er et XML-dokument og her kan du ikke bruge HTML-DOM :)
Ja, når man engang kan bruge XHTML på fornuftig vis, vil sikkert også IE understøtte 'document.getElementsByTagNameNS()' og 'createElementNS()' - som tilføjer mening til det at bruge X(HT)ML.
At bruge 'document.getElementsByTagName()' og 'createElement()' giver jo ikke megen mening i et sprog, der bygger på brugen af forskellige namespaces (udover at de er gabende langsomme i forhold til de namespace-baserede bindings) ... derved bortfalder en af de væsentligste begrundelser for overgangen til X(HT)ML :)
Jeg formoder absolut, at de ikke-namespace-baserede metoder bortfalder i XHTML2.0 - det er i hvert fald ikke til at få øje på deres berettigelse.
Hvad innerHTML angår kan du naturligvis kun bruge den, sålænge du skriver HTML. I XHTML må du bruge DOM - altså oprette hvert enkelt XHTML-element, oprette dets attributter og en evt. tekst-node ... så skal det hele klistres sammen i passende rækkefølge.
Jamen så, velkommen i DOM'en ... det er en herlig måde at arbejde på ;o)
Synes godt om
Ny brugerNybegynder
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.