removeChild und anschließend insertBefore
john
- javascript
Hey.
Ich möchte möchte nach dem Voten meines Umfrageskripts, das das Gadget entfernt wird, die Daten neugeholt werden und dann neu angezeigt werden.
Das mache ich per Ajax und klappt auch super.
Auch das entfernen funktioniert:
var w=document.getElementById("pollwrapper");
w.removeChild(document.getElementById('thepoll'));
Aber das einfügen am Anfang funktioniert nicht.
Fehlerkonsole zeigt mir auch keinen Fehler an.
`w.insertBefore(document.createTextNode(req2.responseText),w.firstChild);`{:.language-javascript}
Hallo john,
wäre in Deinem Fall http://de.selfhtml.org/javascript/objekte/node.htm#replace_data@title=replaceData() nicht die bessere Wahl?
Mit freundlichem Gruß
Micha
Hi.
wäre in Deinem Fall http://de.selfhtml.org/javascript/objekte/node.htm#replace_data@title=replaceData() nicht die bessere Wahl?
Dachte ich auch erst.
Aber damit kann ich ja nur den Inhalt ersetzen.
Das möchte ich aber nicht. Ich möchte X durch X ersetzen und dafür ist replaceData nicht da und ich kenne auch keine andere.
Inhalt von X durch Inhalt von X ersetzen ja - aber X durch X komplett geht nicht.
Hallo john,
Inhalt von X durch Inhalt von X ersetzen ja - aber X durch X komplett geht nicht.
Doch, mit http://de.selfhtml.org/javascript/objekte/node.htm#replace_child@title=replaceChild() aber hierzu musst Du auch ein Objekt haben, was Du einfügst. Wenn ich mir Deine Code aber so ansehe:
document.createTextNode(req2.responseText)
kann ich nur erkennen, dass Du einen Textknoten einfügen bzw. ersetzen willst. Wo ist Dein Element?
Mit freundlichem Gruß
Micha
Hi,
document.createTextNode(req2.responseText)
kann ich nur erkennen, dass Du einen Textknoten einfügen bzw. ersetzen willst. Wo ist Dein Element?
Dass bei diesem Problem die Fehlerkonsole stumm bleiben sollte, ist übrigens extrem unwahrscheinlich.
MfG ChrisB
kann ich nur erkennen, dass Du einen Textknoten einfügen bzw. ersetzen willst. Wo ist Dein Element?
Mein Ajax-Aufruf gibt mir als Textresource schon alles fertig zurücl
sprich:
<div id='Poll'>Ergebnisse der Umfrage</div>
Das Alte id='Poll' soll durch das neue ersetzt werden.
Hi,
Mein Ajax-Aufruf gibt mir als Textresource schon alles fertig zurücl
sprich:
<div id='Poll'>Ergebnisse der Umfrage</div>
Wenn du daraus einen Textknoten erzeugst, dann bekommst du aber auch einen Textknoten (und zwar einen, der als Textinhalt "<div id='Poll'>Ergebnisse der Umfrage</div>" enthält), und kein DIV-Element.
Und das sollte übrigens durchaus ”funktionieren”, auch wenn es nicht das von dir gewünschte ist. (Der genannte *Text* sollte ins Element eingefügt werden, wenn dein Code nicht noch an anderer Stelle fehlerhaft ist.)
In solchen Fällen schreib' das bitte künftig aber auch gleich von Anfang an so, wenn du dein Problem beschreibst - und nicht nur „funzt nich”.
Das Alte id='Poll' soll durch das neue ersetzt werden.
Dann musst du dir erst mal ein neues Element erzeugen.
Wenn du das vom AJAX-Request zurückgelieferte XML-Dokument betrachtest, dann hättest du dort schon einen Elementknoten. Und in Browsern, die document.importNode kennen, könntest du diesen auch in dein Hauptdokument importieren und dann irgendwo einhängen. Da das in älteren IE aber nicht der Fall ist, musst du dir dort was anderes überlegen. Meistens wird der simple Weg über innerHTML gegangen - damit kannst du aber nur komplette Element-Inhalte austauschen. Entweder packst du um <div id='Poll'> in deinem Hauptdokument also noch mal ein Element drum herum (und tauschst dann dessen innerHTML aus) - oder du lässt dir vom Server gleich nur das zurückliefern (in Textform), was <div id='Poll'> enthalten soll, und schreibst es dann in dessen innerHTML-Eigenschaft.
MfG ChrisB
Hallo john,
Mein Ajax-Aufruf gibt mir als Textresource schon alles fertig zurücl
sprich:
<div id='Poll'>Ergebnisse der Umfrage</div>
Das Alte id='Poll' soll durch das neue ersetzt werden.
In dem Fall würde ich vermutlich einfach auf http://de.selfhtml.org/javascript/objekte/all.htm#inner_html@title=innerHTML zurückgreifen. Wenn Du dabei immer das vorhandene Element tauschen musst, hilft Dir http://de.selfhtml.org/javascript/objekte/node.htm#parent_node@title=parentNode ggf. noch weiter.
Mit freundlichem Gruß
Micha
Hi,
Doch, mit http://de.selfhtml.org/javascript/objekte/node.htm#replace_child@title=replaceChild() aber hierzu musst Du auch ein Objekt haben, was Du einfügst.
Genauer: Einen Knoten, einen Node.
Wenn ich mir Deine Code aber so ansehe:
document.createTextNode(req2.responseText)
kann ich nur erkennen, dass Du einen Textknoten einfügen bzw. ersetzen willst.
Nein, an dem, was du beim Kürzen übrig gelassen hast, kannst du höchstens erkennen, dass er einen Textknoten erzeugen möchte.
Wo ist Dein Element?
Die Frage verstehe ich nicht - wenn du den Code so wie gepostet,
w.insertBefore(document.createTextNode(req2.responseText),w.firstChild);
betrachtest, dann ist doch wohl klar, in welchem Element er die Ersetzung durchführen möchte - in dem, auf welches die Variable w referenziert. Deren Befüllung per getElementById war auch zu sehen.
MfG ChrisB
Hallo ChrisB,
Die Frage verstehe ich nicht - wenn du den Code so wie gepostet,
w.insertBefore(document.createTextNode(req2.responseText),w.firstChild);
betrachtest, dann ist doch wohl klar, in welchem Element er die Ersetzung durchführen möchte
Er will aber nicht *in einem Element* was ändern, sondern ein neues hinzufügen - so hatte ich es zumindest in seinem 2. Post verstanden.
Mit freundlichem Gruß
Micha
Hi,
Die Frage verstehe ich nicht - wenn du den Code so wie gepostet,
w.insertBefore(document.createTextNode(req2.responseText),w.firstChild);
betrachtest, dann ist doch wohl klar, in welchem Element er die Ersetzung durchführen möchteEr will aber nicht *in einem Element* was ändern, sondern ein neues hinzufügen - so hatte ich es zumindest in seinem 2. Post verstanden.
„In einem Element etwas ändern” war in diesem Falle eine laxe Formulierung für in einem Element einen Kindknoten durch einen anderen Knoten ersetzen.
Und das macht der gezeigte Code doch. Und das ist auch das, was er will. (Nur noch leicht anders, als er es derzeit macht.)
MfG ChrisB
Hallo ChrisB,
„In einem Element etwas ändern” war in diesem Falle eine laxe Formulierung für in einem Element einen Kindknoten durch einen anderen Knoten ersetzen.
Inhalt von X durch Inhalt von X ersetzen ja - aber X durch X komplett geht nicht.
Inhalt "war in diesem Falle eine laxe Formulierung für" den Text...
Mit freundlichem Gruß
Micha
Jetzt bin ich immer noch nicht weiter =7
Hallo John,
Jetzt bin ich immer noch nicht weiter =7
... und woran scheiterst Du? Chris hat Dir doch sehr schön beschrieben, was Du machen sollst.
Mit freundlichem Gruß
Micha
Hi,
Jetzt bin ich immer noch nicht weiter =7
Kommst du auch nicht, wenn du nur jammerst, anstatt dich mit den Antworten auseinander zu setzen.
MfG ChrisB
Hi,
Aber das einfügen am Anfang funktioniert nicht.
Liefere bitte mehr Informationen - der gezeigte Minimalcode erlaubt kaum einen Rückschluss darauf, woran es liegen könnte.
</hilfe/charta.htm#tipps-fuer-fragende>
MfG ChrisB