Problem mit appendChild?
Jense
- javascript
Folgend ein kleiner Ausschnitt aus dem Code. Der funktioniert soweit, aber wenn ich dann in den gerade erzeugten Container 'Cont0' einen neuen Container einhängen möchte steigt der Browser aus. Da diese Vorgehensweise so (oder so ähnlich?) in anderen Teilen des Codes problemlos funktioniert bin ich etwas ratlos. Sitz schon den ganzen Tag wie der Ochs vorm Berg... Ich habe schon vieles ausprobiert und glaube, dass das Problem in der Zeile test=... des unten aufgeführten Ausschnitts liegt. Garantieren kann ich es natürlich nicht darum jetzt erstmal hier diese Frage an ein paar fachkundige. Wenn so kein Fehler ersichtlich sein sollte, hat vielleicht jemand einen Hinweis ob es grundsätzlich ein Tool (debugger?) gibt womit man in js solche Fehler ausfindig machen kann. Bin für alle Anregungen dankbar. Super Forum übrigens - mal generell angemerkt.
Danke sagt Jense
vCont = document.getElementById("Cont").appendChild(document.createElement("div"));
with(vCont)
{
id="Cont0";
}
test = document.getElementById("Cont0").appendChild(document.createElement("div"));
Hallo,
> vCont = document.getElementById("Cont").appendChild(document.createElement("div"));
>
> with(vCont)
> {
> id="Cont0";
> }
so sollte es gehen:
var vCont=document.createElement("div");
vCont.id="Cont0";
document.getElementById("Cont").appendChild(vCont);
Deine Konstruktion mit with { .. } funktioniert nicht, denn 'id' könnte auch eine normale Variable sein, und nicht wie du wahrscheinlich wünscht eine Eigenschaft von 'vCont'.
Dann ist es besser, erstmal die Existenz eines Elements abzufragen, bevor man es verwendet.
var c=document.getElementById("Cont0");
if (c)
c.appendChild(document.createElement("div"));
else
alert("Cont0 existiert nicht");
Gruß plan_B
Hallo,
vCont = document.getElementById("Cont").appendChild(document.createElement("div"));
with(vCont)
{
id="Cont0";
}
>
> so sollte es gehen:
>
> ~~~javascript
> var vCont=document.createElement("div");
> vCont.id="Cont0";
> document.getElementById("Cont").appendChild(vCont);
>
Deine Konstruktion mit with { .. } funktioniert nicht, denn 'id' könnte auch eine normale Variable sein, und nicht wie du wahrscheinlich wünscht eine Eigenschaft von 'vCont'.
Dann ist es besser, erstmal die Existenz eines Elements abzufragen, bevor man es verwendet.
var c=document.getElementById("Cont0");
if (c)
c.appendChild(document.createElement("div"));
else
alert("Cont0 existiert nicht");
>
> Gruß plan\_B
Danke erstmal für die Antwort. Also das mit der id klappt schon denn ich kann dem 'Cont0' beispielsweise mit style eine andere Farbe zuweisen.
document.getElementById("Cont0").style.backgroundColor="yellow";
Das funktioniert! Auch das anhängen
document.getElementById("NichtDynamischErzeugtesDiv").appendChild(document.createElement("div"));
funktioniert!
Aber:
document.getElementById("Cont0").appendChild(document.createElement("div"));
funktioniert eben nicht!
Ich habe den Eindruck, dass das Problem irgendwie damit zusammenhängt das ich einem gerade neu erzeugten und mit appendChild eingehängeten Container (Cont0) als nächstes gleich wieder einen neuen Container mit appendChild einhängen möchte. Gibt es vielleicht irgendeine 'Verschachtelungsproblematik' oder ähnliches???
Gruss Jense
Bitte kein Fullquote, lass nur das stehen worauf du antworten möchtest, danke.
document.getElementById("Cont0").appendChild(document.createElement("div"));
Ich hab mal versucht dein Problme nachzubauen und bei mir geht es
funktioniert eben nicht!
Das ist halt auch keine Fehlerbeschreibung.
Was sagt die Fehlerkonsole?
Struppi.
Hallo,
Danke erstmal für die Antwort. Also das mit der id klappt schon denn ich kann dem 'Cont0' beispielsweise mit style eine andere Farbe zuweisen.
mag ich gar nicht glauben ...
document.getElementById("Cont0").appendChild(document.createElement("div"));
funktioniert eben nicht!
warum habe ich wohl die Abfrage "if(c)"-Abfrage empfohlen? Damit man erkennt, ob das Element existiert.
was sagt die Fehlerkonsole? "funktioniert nicht" ?
Ich habe den Eindruck, dass das Problem irgendwie damit zusammenhängt das ich einem gerade neu erzeugten und mit appendChild eingehängeten Container (Cont0) als nächstes gleich wieder einen neuen Container mit appendChild einhängen möchte. Gibt es vielleicht irgendeine 'Verschachtelungsproblematik' oder ähnliches???
wenn ein Knoten existiert, kann man ihn sofort verwenden, mit anderen verknüpfen usw.... Er braucht noch nicht einmal im Documenten-Baum eingehängt sein.
Gruß plan_B
warum habe ich wohl die Abfrage "if(c)"-Abfrage empfohlen? Damit man erkennt, ob das Element existiert.
Deine Abfrage habe ich benutzt und zwar letztlich in einer etwas abgewandelten Form mit if then 'existiert' else 'existiert nicht'. Das Element existiert, wenn ich aber Deine If-Abfrage eins zu eins übernehme (also dann das neue div eingehängt werden sollte) dann geht das nicht! Was mein Problem ist...
was sagt die Fehlerkonsole? "funktioniert nicht" ?
Die angezeigten Fehler sind fast alles Folgefehler (nehme ich an).
Allerdings zeigt er einen Fehler an: 'createElement is not defined'
und zwar in einer Zeile in der gar kein Code steht. Diese Leerzeile ist genau zwischen dem erzeugen den Cont0 (was funktioniert) und dem darauf folgenden einhängen eines wiederum neu erzeugten divs in genau diesen Cont0 (was nicht funktioniert).
wenn ein Knoten existiert, kann man ihn sofort verwenden, mit anderen verknüpfen usw.... Er braucht noch nicht einmal im Documenten-Baum eingehängt sein.
Davon bin ich eigentlich auch ausgegangen...
Gibt es vielleicht grundsätzlich irgendwelche Umstände bei denen die appendChild Methode an ein bestehendes Element nicht funktioniert?
Gruss Jens
Hallo,
wenn man aus den Fehlermeldungen des einen Browsers nicht schlau wird, teste mal mit einem anderen.
Bei Struppi's Test funktioniert es ja tadellos.
Gruß plan_B
Die angezeigten Fehler sind fast alles Folgefehler (nehme ich an).
Allerdings zeigt er einen Fehler an: 'createElement is not defined'
und zwar in einer Zeile in der gar kein Code steht. Diese Leerzeile ist genau zwischen dem erzeugen den Cont0 (was funktioniert) und dem darauf folgenden einhängen eines wiederum neu erzeugten divs in genau diesen Cont0 (was nicht funktioniert).
Du benutzt nur den IE?
Der zeigt nicht die richtigen Zeilen an wenn es sich um eine externe Skriptdatei handelt. Teste mal im Firefox.
Davon bin ich eigentlich auch ausgegangen...
Gibt es vielleicht grundsätzlich irgendwelche Umstände bei denen die appendChild Methode an ein bestehendes Element nicht funktioniert?
Nein.
Struppi.