Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Dom aus HTML erstellen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-consult PHP Entwicklung
- Ad -
php-resource




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 :)

 
Kropff
09-07-2010, 19:27 
 
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.

 
unset
09-07-2010, 20:18 
 
Gibt Probleme, besonders bei Formularelementen. Hab ich selber mal erlebt.
Das ist genau so aussagekräftig wie "funzt nicht" … :rolleyes:

 
Kropff
09-07-2010, 20:19 
 
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.

 
wahsaga
09-07-2010, 21:07 
 
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.

 
Kropff
10-07-2010, 16:57 
 
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

 
jmc
10-07-2010, 20:59 
 
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.

 
Kropff
10-07-2010, 21:14 
 
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

 
jmc
12-07-2010, 20:32 
 
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.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:59 Uhr.