Avatar billede 3xm Nybegynder
20. januar 2005 - 17:13 Der 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?

Udvid min horisont, kære medmennesker.


=)
Avatar billede Slater Ekspert
20. januar 2005 - 17:20 #1
Jeg bruger ofte innerHTML i Xhtml, og det virker fint? I hvert fald på Firefox og IE. Har ikke lige prøvet andet.

Kan godt være det officielt set ikke burde virke, men det gør det...

Har XHTML standarden overhovedet noget med Javascript at gøre?
Avatar billede 3xm Nybegynder
20. januar 2005 - 17:27 #2
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).

=)
Avatar billede Slater Ekspert
20. januar 2005 - 17:29 #3
Fandt lige noget på Google om det:

"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."
Avatar billede 3xm Nybegynder
20. januar 2005 - 17:31 #4
"I believe this isn't a bug, it was disabled on purpose." - præcis.

Jeg prøver at rode lidt rundt med forslagene.

Hvis nogen har overskud til at komme med en dybere forklaring på hvordan jeg gør i stedet, så kom frit frem.

=)
Avatar billede Slater Ekspert
20. januar 2005 - 17:36 #5
Ja beklager, jeg har bare slet ikke hørt om det før.

Nok godt du sagde det, da jeg også selv lige er migreret fra HTML4.0 til XHTML1.0
Har bare ikke opdaget at der var et problem med det.
Avatar billede 3xm Nybegynder
20. januar 2005 - 17:47 #6
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.

=)
Avatar billede Slater Ekspert
20. januar 2005 - 17:51 #7
Jeg stoler åbenbart for meget på W3C.org's validator.
Avatar billede 3xm Nybegynder
20. januar 2005 - 18:00 #8
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 var i hvert fald det jeg fik at vide.

=)
Avatar billede 3xm Nybegynder
20. januar 2005 - 18:13 #9
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.

I stedet vil jeg henvise til Mozillas Gecho DOM Reference: http://www.mozilla.org/docs/dom/domref/dom_shortIX.html
Med den burde man kunne løse de fleste problemer.

viperine, hvis du vil have nogle point, så smid lige et svar.

=)
Avatar billede Slater Ekspert
20. januar 2005 - 18:28 #10
Jeg synes jeg har fået mere hjælp end jeg har givet :P

Behold dem endelig.
Avatar billede Slettet bruger
20. januar 2005 - 19:00 #11
Avatar billede olebole Juniormester
20. januar 2005 - 19:11 #12
<ole>

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.

... hvad modefænomener dog ikke kan folk til  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
20. januar 2005 - 19:15 #13
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  :)
Avatar billede Slater Ekspert
20. januar 2005 - 19:38 #14
ole -> Har jeg heller aldrig gjort. Bruger kun document.getElementById() og document.getElementsByTagName() ... bliver nogle af de fjernet?
Avatar billede 3xm Nybegynder
20. januar 2005 - 21:52 #15
ole, modefænomen eller ej. har du et forslag til løsning af problemet?

=)
Avatar billede 3xm Nybegynder
20. januar 2005 - 21:54 #16
el barto, alt det der har jeg læst igennem adskillige gange, adskillige steder (ja, det var vistnok ole der første gang gjorde mig opmærksom på det).
Avatar billede olebole Juniormester
20. januar 2005 - 22:49 #17
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.
Avatar billede 3xm Nybegynder
13. august 2006 - 20:50 #18
oprydningstid... hvis nogen føler trang til point, så smid et svar.

jeg har i mellemtiden fået meget mere styr på alt det der med at manipulere dom og jonglerer næsten dagligt rundt med elementer. halleluja!

=)
Avatar billede olebole Juniormester
14. august 2006 - 13:04 #19
Jamen så, velkommen i DOM'en ... det er en herlig måde at arbejde på  ;o)
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