Archiv verlassen und diese Seite im Standarddesign anzeigen : Dom aus HTML erstellen
ThemBones 09-07-2010, 11:59 Hallo,
such sowas schon seit einiger Zeit, wurde noch nicht fündig und komm nicht dazu mir sowas selbst zu schreiben.
Such ein JS-Script, das mir aus aus einem HTML-Template DOM-Elemente via document.createElement() etc. erstellt.
AmicaNoctis 09-07-2010, 12:16 Hallo,
wo kommt denn der HTML-Code her? Wenn der sowieso vom Server kommt, kannst du ihn mit AJAX laden und hast ihn dann im responseXML als DOMDocument – vorausgesetzt er liegt als valides XHTML vor und wird als application/xhtml+xml, application/xml oder text/xml gesendet.
Wenn nicht, kannst du den Code immer noch per innerHTML in ein leeres div schreiben und dann mit den DOM-Methoden darauf zugreifen. Der letzte Rettungsanker wäre noch document.write.
Gruß,
Amica
ThemBones 09-07-2010, 13:46 Hi Amica,
danke für deine Antwort.
Eben, das Ding ist das, ich möchte dass der Code aus einem Template geholt wird. innerHTML macht mit dem IE immer wieder mal Probleme. Ausserdem gibts damit immer wieder mal Probleme wenn man bereits per Ajax generierten dynamischen Inhalt nochmals mit JS-Funktionen zur Laufzeit ausstatten möchte.
Find einfach die Erstellung per Dom-Methoden sauberer.
Aber die Anregung an sich ist nicht schlecht, ich könnt natürlich einfach via AJAX das Template rendern lassen und mir das Ergebnis zurückgeben.
Danke schonmal :)
Schau dir mal das Tutorial (http://www.peterkropff.de/tutorials/js_dom_2/js_dom_2.htm) an, da geht es um Ajax und DOM-Manipulation. Vielleicht hilft es dir weiter.
Wenn der sowieso vom Server kommt, kannst du ihn mit AJAX laden und hast ihn dann im responseXML als DOMDocument – vorausgesetzt er liegt als valides XHTML vor und wird als application/xhtml+xml, application/xml oder text/xml gesendet.
Gibt Probleme, besonders bei Formularelementen. Hab ich selber mal erlebt.
Wenn nicht, kannst du den Code immer noch per innerHTML in ein leeres div schreiben und dann mit den DOM-Methoden darauf zugreifen.
Mit innerHTML gibt es tatsächlich Probleme.
Peter
AmicaNoctis 09-07-2010, 20:02 Gibt Probleme, besonders bei Formularelementen. Hab ich selber mal erlebt.
Dann erzähl mal, das interessiert mich jetzt auch.
Gibt Probleme, besonders bei Formularelementen. Hab ich selber mal erlebt.
Das ist genau so aussagekräftig wie "funzt nicht" … :rolleyes:
Dann erzähl mal, das interessiert mich jetzt auch.
Ich habe per Ajax-Request in einem PHP-Script ein select-Feld mit den entsprechenden option-Elementen erzeugt und ausgegeben. Der Header war korrekt ausgezeichnet mit text/xml, text/html oder text/xhtml. Hab alle drei ausprobiert. Und das wollte ich ganz einfach per innerHTML in ein div einhängen. Gibt nicht. Dann habe ich einen neuen Knoten erzeugt, wollte das select einhängen und den neuen Knoten in das div, ging auch nicht. Ich habe da etliche Stunden herumprobiert, aber nichts funktionierte.
Peter
PS: Vielleicht lag es auch daran, dass der eigentliche (X)HTML-Code nicht vollständig valide war. Könnte eine Möglichkeit gewesen sein.
PS: Vielleicht lag es auch daran, dass der eigentliche (X)HTML-Code nicht vollständig valide war. Könnte eine Möglichkeit gewesen sein.
Nein, es lag am IE - http://www.php-resource.de/forum/html-javascript-ajax-und-css/98858-innerhtml-im-ie-schneidet-elemente-ab.html#post635408
AmicaNoctis 09-07-2010, 21:16 PS: Vielleicht lag es auch daran, dass der eigentliche (X)HTML-Code nicht vollständig valide war. Könnte eine Möglichkeit gewesen sein.
Ähm, ja. Jaaa! ;)
Davon abgesehen sollte der Content-Type application/xhtml+xml sein und nicht irgendetwas selbst ausgedachtes ;)
Außerdem hat man dann das DOM des geladenen Dokuments direkt im responseXML des XHR und braucht innerHTML nicht mal ansatzweise. Das ist nämlich AJAX im wörtlichen Sinne und eigentlich die sauberste Variante.
Außerdem hat man dann das DOM des geladenen Dokuments direkt im responseXML des XHR und braucht innerHTML nicht mal ansatzweise. Das ist nämlich AJAX im wörtlichen Sinne und eigentlich die sauberste Variante.
Ich schau's mir mal an, sobald es sich hier in Köln ein klein wenig abgekühlt hat. Mein Hirn wird schon seit Tagen frittiert.
Peter
Z.B. das Framework prototypejs hat die drei bekannten Fehler bei innerHTML korrigiert (script-, table- und select-tags). Schau dir einfach mal die funktion update dort im Quellcode an, damit hast du es ziemlich schnell gelöst.
Z.B. das Framework prototypejs hat die drei bekannten Fehler bei innerHTML korrigiert (script-, table- und select-tags). Schau dir einfach mal die funktion update dort im Quellcode an, damit hast du es ziemlich schnell gelöst.
Mach ich, sobald ich wieder klar denken kann.
Peter
ThemBones 12-07-2010, 12:03 Außerdem hat man dann das DOM des geladenen Dokuments direkt im responseXML des XHR
Naja das stimmt in meinem Fall nur bedingt. Ich arbeite mit JSON, php bietet sogar eine Funktion dafür (json_encode (http://at.php.net/json_encode))
Z.B. das Framework prototypejs hat die drei bekannten Fehler bei innerHTML korrigiert (script-, table- und select-tags). Schau dir einfach mal die funktion update dort im Quellcode an, damit hast du es ziemlich schnell gelöst.
Benutz ich bereits. Wirklich sehr angenehm. evalJSON() (http://www.prototypejs.org/api/string/evalJSON) bietet das Gegenstück zu json_encode auf Serverseite.
Nachteil ist eben, das ich keine dom-Objekt zurückbekomme sondern JSON-Daten (find das angenehm wenns relativ komplexe Objekte sind).
Habs jetzt tatsächlich so gelöst, dass eben noch ein AJAX-Call hinzukommt, und ich einfach ein Template rendere. Damit hab ich meine dom-Objekt und ich kann innerHTML verwenden. Klingt jetzt vielleicht umständlich, aber ich kann jetzt einfach das template bearbeiten ohne im JS-Code rumfingern zu müssen.
Danke nochmal!
AmicaNoctis 12-07-2010, 17:29 Naja das stimmt in meinem Fall nur bedingt. Ich arbeite mit JSON
Du überträgst HTML-Templates* mit JSON? Denn Sinn dahinter musst du mir mal erklären ;)
___
* Ich beziehe mich dabei auf
das mir aus aus einem HTML-Template DOM-Elemente via document.createElement() etc. erstellt
Wenn du prototypejs benutzt warum dann nicht gleich update() statt innerHTML. Das ist genau für diesen Zweck da, da innerHTML je nach Browser Fehler aufweist.
ThemBones 13-07-2010, 12:56 Du überträgst HTML-Templates* mit JSON? Denn Sinn dahinter musst du mir mal erklären ;)
___
* Ich beziehe mich dabei auf
Nein natürlich nicht die Templates. Erst ein Request mit JSON, und dann kommt ein 2. dazu der das Template lädt.
|
-
- |