Ersatz für innerHTML
Kai
- javascript
Hallo,
ich wollte in meinem javascript innerHTML durch firstChild.nodeValue ersetzen. Dieses geht allerdings nur wenn der Tag einen Inhalt hat. Ich hatte vorher document.body.innerHTML verwendet, aber body hat ja normalerweise keinen Inhalt.
Weiß hier jmd Rat? Wäre echt super!
Viele Grüße
Kai
Hallo,
also meiner Erinnerung nach beschreibt Douglas Crockford in einem seiner Lehrvideos "innerHTML" als ein sehr "powerful feature". Vielleicht überlegst du, ob du nicht doch dabei bleiben willst.
Wobei es auch gut ist, mehr über das DOM bzw. die Funktionen zur Manipulation desselbigen zu kennen.
Gruß
jobo
Hallo Kai,
du kannst den Elementen schon beim Anlegen einen (Default-)Inhalt geben, oder du arbeitest mit z.B. createTextNode.
Gruß, Jürgen
Hallo,
Vielen Dank für eure schnellen Antworten :)
@Kai:
ich hatte folgendes probiert:
document.body.appendChild(document.body.createTextNode(" "));
Da kommt jetzt aber die Fehlermeldung Objekt unterstützt diese Eigenschaft oder Methode nicht. Was habe ich falsch gemacht?
Da ich xml-Dateien habe und diese über eine Servlet-Transformation darstelle, kann ich <body> leider keinen Default-Wert geben. Wenn man HTML Transitional verwendet ist es ja erlaubt, dass ich <body> ein Leerzeichen zuweisen würde oder?
@Jobo:
Soweit ich weiß gehört innerHTML leider nicht zum Standard oder täusche ich mich da?
LG Kai
Hi,
ich hatte folgendes probiert:
document.body.appendChild(document.body.createTextNode(" "));Da kommt jetzt aber die Fehlermeldung Objekt unterstützt diese Eigenschaft oder Methode nicht. Was habe ich falsch gemacht?
createTextNode unsinnigerweise unterhalb von body verortet.
Soweit ich weiß gehört innerHTML leider nicht zum Standard oder täusche ich mich da?
Es ist Quasi-Standard - in allen großen Browsern implementiert.
(Im IE muss man ein bisschen aufpassen, weil es für manche Elemente read-only definiert ist, siehe MSDN.)
MfG ChrisB
Hallo,
createTextNode unsinnigerweise unterhalb von body verortet.
aber ich hatte doch auch das innerHTML bei body, dann müsst ich dort doch auch createTextNode machen oder nicht? und laut Transitional ist das doch auch erlaubt? Hast du nen besseren Vorschlag wie ich das machen könnte, brauche aber eigentlich alle Elemente+Inhalte unterhalb von body :(
Wenn man sich an den W3C halten möchte, dann ist es aber wahrscheinlich nicht erlaubt oder?
LG Kai
Hi,
aber ich hatte doch auch das innerHTML bei body, dann müsst ich dort doch auch createTextNode machen oder nicht?
Oder nicht.
createTextNode ist eine Methode von document.
Hast du nen besseren Vorschlag wie ich das machen könnte, brauche aber eigentlich alle Elemente+Inhalte unterhalb von body :(
Dann nimm innerHTML.
MfG ChrisB
Dann nimm innerHTML.
Wollte mich halt eigentlich an den vom W3C vorgegebenen Standard halten und ich dachte, dass innerHTML da nicht dazugehört ;-)
LG Kai
Hi,
Dann nimm innerHTML.
Wollte mich halt eigentlich an den vom W3C vorgegebenen Standard halten und ich dachte, dass innerHTML da nicht dazugehört ;-)
Wie gesagt, Quasi-Standard ist es schon seit Jahren.
Und mit HTML5 ist es auch vom W3C standardisiert worden.
MfG ChrisB
@@ChrisB:
nuqneH
Und mit HTML5 ist es auch vom W3C standardisiert worden.
Das Perfekt ist hier unangabracht. Wie wäre es mit: Und mit HTML5 wird es auch vom W3C standardisiert worden sein?
Qapla'
Hallo,
@Jobo:
Soweit ich weiß gehört innerHTML leider nicht zum Standard oder täusche ich mich da?
Crockford (aus einem ppt-Dokument):
innerHTML
* The W3C standard does not provide access to the HTML parser.
* All A browsers implement Microsoft's innerHTML property.
Which Way Is Better?
* It is better to build or clone elements and append them to the document?
* Or is it better to compile an HTML text and use innerHTML to realize it?
* Favor clean code and easy maintenance.
* Favor performance only in extreme cases.
und
"The W3C committee that was putting all this together, it never occurred to them that people would want to process their own HTML text within a script within a browser. ...
Microsoft recognized that that was terrible, so they came up with something called innerHTML, which is a bad name for what it does. I think it's a bad API. ... , but still, it works.
It turns out that something browsers are really good at is parsing HTML and building trees, so this can be a very effective way of doing things. Unfortunately, it's a security hazard if you have any user-generated text that's getting put into the structure ... So you need to be really careful in generating text to go to innerHTML.
All of the other browser makers recognize that Microsoft was right in this and that the W3C model was deficient, so all of the browsers implement innerHTML even though no standard requires it. It raises a question for the developer: which one should you use? If you're making new content to put into a page, should you build each of the nodes individually and paste them all together and plug them in, or should you build up a big text and use innerHTML to do that?
My advice is, do the one that favors clean code and easy maintenance for your application. This is, in most cases, something that should not be decided in terms of performance. Performance should only influence you in extreme cases. In ordinary cases, if performance is not going to be undermining the user experience, choose the one that makes the most sense. If performance is an issue then you want to use innerHTML, because browsers are really good at that. Even though it appears that the browser's doing a lot more work, it goes a lot faster. I'll tell you why in a little bit."
aus http://developer.yahoo.com/yui/theater/video.php?v=crockonjs-4
Gruß
jobo
... Even though it appears that the browser's doing a lot more work, it goes a lot faster. I'll tell you why in a little bit."
Das war mal: http://andrew.hedges.name/experiments/innerhtml/
Aber ich nutze auch innerHTML, wenn ein kurzer Inhalt einzufügen ist. Aber bei komplexen HTML Strukturen sehe ich in innerHTML keinen Vorteil.
Struppi.
createTextNode, appendChild, insertBefore,... es gibt viele Methoden, aber die innerHTML-Eigenschaft ist meistens einfacher (und wenn man viele Elemente gleichzeitig einfügen will, sogar in der Mehrzahl der Browser schneller).
Gruß, LX