HTML in div schreiben ohne "innerHTML"
Enrico
- javascript
Hallo,
ich will mir in einem div-Bereich namens "Anzeige" über AJAX den variablen Inhalt
einer Textdatei anzeigen lassen:
var Anzeigebereich = window.document.getElementById ("Anzeigebereich");
var Inhalt = window.document.createTextNode (http_request.responseText);
Anzeigebereich.appendChild (Inhalt);
Dies funktioniert ja auch fast schon so wie vorgesehen, allerdings wird mir hier
der html-Code, der aus den Inhalten der Textdatei erzeugt wird, angezeigt und nicht
der Inhalt in Tabellenform.
Da die Erzeugung des html-Codes hier keine Rolle spielt, habe ich ihn auch weggelassen.
Wie bekomme ich es nun hin, dass ich auch wirklich die Tabelle und nicht das zu ihrer
Anzeige notwendige Konstrukt im div ausgegeben bekomme?
"innerHTML" erfüllt nicht meine Zwecke, da ich den aufbereiteten Inhalt der Textdatei
als festen Bestandteil im Quelltext benötige, da ich nach der Ausgabe des Inhaltes im
div dessen Breite über ein Javascript anpassen lasse.
Da meine Seite nur mit Firefox betrieben wird, muß ich hier keine Ausnahmen berücksichtigen.
Ihr konntet mir folgen ?!? ;-)
Ich hoffe, Ihr könnt mir hier weiterhelfen.
Vielen Dank und Gruß,
Enrico
Hi,
var Anzeigebereich = window.document.getElementById ("Anzeigebereich");
var Inhalt = window.document.createTextNode (http_request.responseText);
Anzeigebereich.appendChild (Inhalt);
Dies funktioniert ja auch fast schon so wie vorgesehen, allerdings wird mir hier der html-Code, der aus den Inhalten der Textdatei erzeugt wird, angezeigt und nicht der Inhalt in Tabellenform.
natürlich, du hast ja auch nur einen Textknoten erzeugt.
"innerHTML" erfüllt nicht meine Zwecke, da ich den aufbereiteten Inhalt der Textdatei als festen Bestandteil im Quelltext benötige, da ich nach der Ausgabe des Inhaltes im div dessen Breite über ein Javascript anpassen lasse.
Was hat das eine mit dem anderen zu tun? Anders gefragt: Warum meinst du, dass innerHTML in diesem Fall versagt?
Ihr konntet mir folgen ?!? ;-)
Nur zum Teil.
So long,
Martin
Hallo,
"innerHTML" versagt deshalb, weil ich den als Tabelle aufbereiteten Inhalt meiner Textdatei damit
nicht direkt in den Quelltext der Seite einbinden kann.
Somit "greift" mein nachfolgendes Javascript, das dem aktuell angezeigten Inhalt ein "margin-right",
jenachdem wie lange der anzuzeigende Inhalt ist und ob damit ein vertikaler Scrollbalken angezeigt
wird oder nicht.
Das Script kann aus dem einen Grund auch nicht greifen, weil der div, was den Quelltext angeht, leer
bleibt und somit nie ein "margin-right" zum Tragen kommt.
Gruß
Enrico
Hmm, bei meiner Methode über Einhängen eines Textknotens bleibt der Quelltext
des divs auch leer, aber mein "margin-right" wird ausgeführt...
Auch seltsam...
Enrico
Nabend!
was vertstehst du eigentlich unter 'Quelltext des Divs'?
Hallo,
"evtl." habe ich mich da auch mißverständlich ausgedrückt.
Mir geht es darum, dass ich per AJAX Inhalt in meinen div "Anzeigebereich" schreibe. Im
Anschluß daran prüft ein Javascript, ob die Höhe des aktuell angezeigten Inhaltes des
Divs "Anzeigebereich" größer als die Höhe des Divs ist.
Wenn ja, dann bekommt mein Div eine neue Klasse zugewiesen, die ihn rechts etwas von dem
dann angezeigten Scrollbalken "wegschiebt", wenn nicht, dann wird der Div so belassen, wie
er ist, also ohne zusätzlichen Abstand.
Ich muß es nun so hinbekommen, dass meine AJAX-Routine den Inhalt so reinschreibt, dass das
Javascript auch greift, was es mit "innerHTML" nicht tut. Hier wird mir zwar der Inhalt
ordnungsgemäss angezeigt, aber ich habe keinen zusätzlichen Abstand (und die Seite ist
definitiv höher als die Höhe des Divs). Wenn ich meine aktuelle Methode mit "createTextNode"
und "appendChild" anwende, dann habe ich zwar einen zusätzlichen Abstand, aber den Inhalt
als HTML-Quelltext.
Ich dachte mir nun, dass ich es so hinbekommen müsste, dass die Tabelle direkt in den Quelltext
meiner Seite eingebunden werden müsste, damit ich zum einen den Inhalt wie gewünscht auf meinem
Bildschirm habe, und das Javascript zum anderen auch richtig funktioniert, was aktuell, d.h.
unter Verwendung meiner Methode, nicht der Fall ist.
Ich habe aktuell entweder den Inhalt mit Scrollbalken ohne zusätzlichen Abstand oder den Inhalt
als HTML-Code als Anzeige mit Scrollbalken aber mit zusätzlichem Abstand.
Mann, das ist wirklich blöd zum Formulieren :-)
Gruß
Enrico
Hi!
Vielleicht hast Du den Teil JS Code, der feststellt, ob der Inhalt groesser als der Container ist?
Hallo,
hier die relevanten Code-Teile:
Datei zur Anzeige der Inhalte der Textdatei:
<div id="Anzeigebereich" class="Normaler_Abstand">
<script type="text/javascript">
macheRequest ('');
</script>
</div>
<script type="text/javascript" language="javascript" src="BIBLIOTHEKEN/JS/Anzeigebereich_anpassen.js"></script>
AJAX-Code:
function macheRequest (Parameter)
{
http_request = false;
http_request = new XMLHttpRequest ();
if (http_request.overrideMimeType)
{
http_request.overrideMimeType ('text/xml');
}
if (!http_request)
{
alert('Das Request Objekt konnte nicht erzeugt werden! Bitte ueberpruefen Sie Ihre JAVA Einstellungen!');
return false;
}
http_request.onreadystatechange = show;
http_request.open ('GET', 'http://127.0.0.1/DVD-VERWALTUNG_NEU/BIBLIOTHEKEN/PHP/Anzeige.php' + Parameter, true);
http_request.send (null);
}
function show ()
{
if (http_request.readyState == 4)
{
var Anzeigebereich = window.document.getElementById ("Anzeigebereich");
var Inhalt = window.document.createTextNode (http_request.responseText);
Anzeigebereich.appendChild (Inhalt);
}
}
Datei "Anzeigebereich_anpassen.js":
var Anzeigebereich = window.document.getElementById ("Anzeigebereich");
var div_Hoehe = Anzeigebereich.clientHeight;
var Seitenlaenge = Anzeigebereich.scrollHeight;
if (Seitenlaenge > div_Hoehe)
{
Anzeigebereich.className = "Zusaetzlicher_Abstand";
}
else
{
Anzeigebereich.className = "Normaler_Abstand";
}
Gruß
Enrico
Hi,
Datei "Anzeigebereich_anpassen.js":
var Anzeigebereich = window.document.getElementById ("Anzeigebereich");
ach je. Der Code wird mit an Sicherheit grenzender Wahrscheinlichkeit ausgeführt, lange bevor der AJAX-Response da ist. Darüber hinaus sind Deine HTML-Klassenbezeichner grober Unfug.
Cheatah
Hallo Cheatah,
ich werde Deine Antwort und den Tip von Steel später umsetzen bzw. ausprobieren,
vielen Dank auf jeden Fall hierfür schon mal.
Wieso findest Du meine HTML-Klassenbezeichner als groben Unfug ?
Sollten/dürfen die so nicht benannt werden oder wie meinst Du das genau ?
Gruß
Enrico
Hi!
Wieso findest Du meine HTML-Klassenbezeichner als groben Unfug ?
Ja, so ist der Cheatah. Hin und wieder erlebt man allerdings einen der seltenen Momente, wo dieses scheue Tierchen statt eines kurzen Einwands auch mit einer naeheren Erklaerung aufwartet, ohne dass man es mit Leckereien oder Androhungen von wirklich schlechtem Code aus seinem Versteck hervorholen muss. Das Geruecht geht um, dass diese seltene Spezies unter anderem von gutem Scotch angelockt wird.
Sollten/dürfen die so nicht benannt werden oder wie meinst Du das genau ?
Duerfen: ja. Sollten: nein.
Normaler_Abstand
Was ist denn normaler Abstand?
Zusaetzlicher Abstand ist genauso schwammig. Was, wenn der Abstand mal gar nicht mehr veraendert werden soll, sondern etwas anderes?
Das ist so, als ob Du eine Klasse "fett_rot_12px" nennst. Du beschliesst auf em umzusteigen und musst auch noch die Klassennnamen veraendern, damit es nicht total verwirrend ist. 2 Tage spaeter, mitten im Umgestaltungswahn, entschliesst Du, dass rot keine gute Farbe ist, sondern ein blaugruen. Kaum hast Du alle Klassen umbenannt erinnerst Du dich, dass du das ganze doch eigentlich nicht mehr fett haben wolltest...
Die Klassennamen (auch IDs) sollten etwas beschreiben, das auf ihre Funktion zutrifft, aber keine Details uber die Formatierungen enthalten.
In deinem Fall kannst Du einen Klassennamen waehlen, dervon deiner Funktion abhaengig ist. Deine funktion checkt die Groesse des Divs und ob Scrollbalken noetig sind. Denk dir dafuer was aus.
Hallo Steel,
ah, so ist das gemeint :-)
Nun ja, hab schon festgestellt, dass Cheatah mitunter, wie soll ich es fomulieren,
extrem kompakt und fast schon revolutionär antwortet, was gerne alles in Frage stellt.
Doch hat er so zu manch heiterem Lesevergnügen meinerseits gesorgt, weil viele mit
seiner Art wohl nichts anzufangen wissen :-)
Gut, dann werde ich meine Bezeichnungen mal überdenken.
Nochmals vielen Dank für Eure wirklich super Hilfe und bis denne ;-)
Gruß
Enrico
Hi!
Nun ja, hab schon festgestellt, dass Cheatah mitunter, wie soll ich es fomulieren,
extrem kompakt und fast schon revolutionär antwortet, was gerne alles in Frage stellt.
Interessante Beschreibung. :D
Doch hat er so zu manch heiterem Lesevergnügen meinerseits gesorgt, weil viele mit
seiner Art wohl nichts anzufangen wissen :-)
Ja. Ich lese manche Threads nur, weil Cheatah antwortet...
*lacht boese*
Gut, dann werde ich meine Bezeichnungen mal überdenken.
Muss nicht, ist zur Wartung aber wohl dienlich.
Nochmals vielen Dank für Eure wirklich super Hilfe und bis denne ;-)
Kein Problem, schoen, dass Du das so siehst. :)
Hallo Steel,
Interessante Beschreibung. :D
Ich bin irgendwann mal auf die Seite von Cheatah gegangen und muss sagen, dass ich ihn mir
komplett anders vorgestellt hätte.
Auf jeden Fall lassen die Kommentare von ihm in seinen Threads auf eine gesunde Portion
Intellekt schliessen und auch auf sehr hohe rhethorische Gewandtheit.
Ja. Ich lese manche Threads nur, weil Cheatah antwortet...
Diese lese ich auch mit Vorliebe :-))
Kein Problem, schoen, dass Du das so siehst. :)
Ohne dieses Forum wäre ich wohl schon längst aus dem Fenster gesprungen *lach*
Ne, Spaß beiseite, hier wird einem wirklich geholfen und man lernt verdammt viel dazu :-)
In diesem Sinne,
Gruß
Enrico
Hey,
Ich bin irgendwann mal auf die Seite von Cheatah gegangen und muss sagen, dass ich ihn mir
komplett anders vorgestellt hätte.
Ich kenn da nur ein uraltes Gruseliges Machwerk (webseite) von vor X Jahren. Was heisst 'anders vorgestellt'? Anhand der gruseligen Seite, oder hast Du nen Bild gesehen? Das will ich dann auch sehen.
Ich hab noch massig Platz an meinen Waenden. Son lebensgrosser Cheatah auf Leinwand macht sich sicherlich gut. *lacht*
Naja, wenn ich nochmal drueber nachdenk, gibts da vielelicht doch ein oder zwei andere Dinge, die ich mir (wahrscheinlich) lieber an die Waende haenge... ;)
Hallo Steel,
Son lebensgrosser Cheatah auf Leinwand macht sich sicherlich gut. *lacht*
Naja, wenn ich nochmal drueber nachdenk, gibts da vielelicht doch ein oder zwei andere Dinge, die ich mir (wahrscheinlich) lieber an die Waende haenge... ;)
DINGE??
*scnr*
Martin
Hi!
DINGE??
*scnr*
Martin
*raeusper* Naja. Wie man 'Dinge' so definiert. Ein son 'Ding' befindet sich z.B. grad am anderen Ende meiner MSN Communicator Leitung und geht grad seiner Arbeit nach. Ich weiss auch gar nicht, was 'es' dazu sagen wuerde, wenn 'es' das hier liest.
Ansonsten durchaus Dinge. Das 'Ding' macht z.B. durchaus schoene Fotos wovon ich mir eines schon als Poster eingerahmt und uebers Bett gehaengt habe. Darauf ist nen Rosenbusch, Wassertropfen und die aufgehende Sonne durch Baumgeaest. Dinge halt. ;)
Hallo,
DINGE??
*raeusper* Naja. Wie man 'Dinge' so definiert.
also eigentlich eher so nette, süße Dinger? ;-)
Ein son 'Ding' befindet sich z.B. grad am anderen Ende meiner MSN Communicator Leitung und geht grad seiner Arbeit nach. Ich weiss auch gar nicht, was 'es' dazu sagen wuerde, wenn 'es' das hier liest.
Hoffen wir, dass 'es' nicht mitliest.
Darauf ist nen Rosenbusch, Wassertropfen und die aufgehende Sonne durch Baumgeaest. Dinge halt. ;)
Ja okay, klingt recht ästhetisch. Ich habe stattdessen ein Bild der Oakland Bay Bridge, einen heulenden Wolf mit dem Vollmond im Hintergrund, und eine schwarzhaarige schöne Unbekannte an der Wand hängen. :-)
Ciao,
Martin
Moin!
also eigentlich eher so nette, süße Dinger? ;-)
*unschuldigpfeif*
Hoffen wir, dass 'es' nicht mitliest.
Nene. Das passiert schon nicht. *hoff*
Ja okay, klingt recht ästhetisch. Ich habe stattdessen ein Bild der Oakland Bay Bridge, einen heulenden Wolf mit dem Vollmond im Hintergrund, und eine schwarzhaarige schöne Unbekannte an der Wand hängen. :-)
Bei mir waers dann wohl eher die schwarzhaarige schoene nicht Unbekannte... ;)
Hiho!
Cheatah hat ja schon geschrieben woran es wohl liegt. Du hast nicht bedacht, dass der Ajaxcode ja asynchron ausgefuehrt wird. Das heisst, das Programm wartet nicht, sondern macht nach dem Request munter weiter. Wenn also dein Inhalt kommt hat dein Programm wohl schon lang ein leeres Div vermessen.
Mach aus dem Anpassungsscript eine Funktion, die nach dem Einfuegen aufgerufen wird. (am Ende von show() einfuegen) So sollte es auch mit innerhtml klappen.
Hallo Steel,
super, jetzt klappt's :-))
Vielen Dank für Deine Hilfe :-))
Gruß
Enrico
Heyho!
super, jetzt klappt's :-))
Freut mich. :)
Vielen Dank für Deine Hilfe :-))
Keine Ursache.
Schoen, dass es Feedback gab, obs was gebracht hat.
Hi,
"innerHTML" erfüllt nicht meine Zwecke, da ich den aufbereiteten Inhalt der Textdatei
als festen Bestandteil im Quelltext benötige, da ich nach der Ausgabe des Inhaltes im
div dessen Breite über ein Javascript anpassen lasse.
Du willst etwas tun, das exakt dem Zweck von innerHTML entspricht, aber einen anderen Namen trägt. Du erwartest einen wie auch immer gearteten Unterschied. Woher soll dieser kommen? Was soll das überhaupt für ein Unterschied sein? Bitte erkläre es verständlich.
Cheatah
Du erwartest einen wie auch immer gearteten Unterschied. Woher soll dieser kommen? Was soll das überhaupt für ein Unterschied sein? Bitte erkläre es verständlich.
dass es einen brauchbaren unterschied gäbe, hatte ich auch vermutet - allerdings hat mich molily eines besseren belehert:
http://forum.de.selfhtml.org/archiv/2008/7/t174521/#m1146327