Array Elemente werden nicht ausgegeben HTML 4.01
ctx
- javascript
2 ChrisB0 ctx0 ctx0 ctx0 Camping_RIDER
0 Gunnar Bittersmann
0 JürgenB
0 ctx
0 ChrisB
guten Abend,
zurSache:
Resultat:
im übergeordneten Div läuft alles glatt, Im untergeordneten nicht
Im DOM sind die erstellten elemente beider Arrays vorhanden aber nut der übergeordte Div-Container gibt es aus.
<html>
<head>
<script type="text/javascript">
window.onload = fncOnload;
function fncOnload() {
oberEbene = window.document.getElementById("oberEbene");
unterEbene = window.document.getElementById("unterEbene");
neuArray1 = new Array();
neuArray2 = new Array();
aufruf();
}
function aufruf() {
for (var i = 0; i < 10; i++) {
neuArray1[i] = "<div class='element1'></div>";
oberEbene.innerHTML += neuArray1[i];
neuArray2[i] = "<div class='element2'></div>";
unterEbene.innerHTML += neuArray2[i];
}
}
</script>
</head>
<body>
<div id="oberEbene">
<div id="unterEbene">
<!-- neuArray2 sollen hinzugefuegt werden -->
</div>
<!-- neueArray1 sollen hinzugefuegt werden -->
</div>
</body>
</html>
Zur Info:
Soucecode-Auszug aus einem Projekt für HTML 4.1 / CSS 2.1 / JavaScript 1.6.
Für hilfe anregungen wäre ich sehr dankbar mit deren hilfe ich dieses Problem beseitigen kann.
grüße ctx
Hi,
> for (var i = 0; i < 10; i++) {
> neuArray1[i] = "<div class='element1'></div>";
> oberEbene.innerHTML += neuArray1[i];
Hier überschreibst du innerHTML des Elements, das dein Div mit der id unterEbene enthält – und damit ist *enthielt* ab hier die passendere Zeitform.
Dadurch, dass du innerHTML überschreibst, werden alle vorhandenen Elemente ersetzt; selbst wenn du vermeintlich nur etwas hinzufügst – eine Zuweisung an innerHTML bewirkt immer, dass alle vorhandenen Kindelemente zerstört werden.
Du hast zwar anschließend eine *Kopie* des Divs unterEbene in deinem oberen Div – aber da es nicht mehr das selbe Element ist, verweist hier
> neuArray2[i] = "<div class='element2'></div>";
> unterEbene.innerHTML += neuArray2[i];
unterEbene nur auf ein Element, das es nicht mehr gibt.
Du müsstest dir hier erst mal die Referenz auf das – derzeitige – Element mit der id unterEbene neu holen, bevor du mit ihm arbeiten kannst.
Besser wäre es aber vermutlich, wenn du gar nicht erst innerHTML benutzen würdest, sondern die Elemente mit DOM-Methoden erzeugst und einhängst.
MfG ChrisB
besten Dank. Du wart mir ne große hilfe
mfG
Guten Morgen ChrisB,
Sorry ich muss nochmal stören. Ich hab deine Antwort gelesen.
Kannst du die "richtige" lösung mit umgeschriebenen quellcode posten, bitte? und bitte mit innerHTML.
Ich weis das innerHTML = bla;
überschrieben wird aber ich hab ja auch innerHTML += bla;
geschrtieben, also in den Div-Container hinzugefügt. egal wie ichs dreh es funzt immer nur eines.
Schon einmal Danke im voraus.
mfg
ps.: bin leider sprachbehindert was allerdings kognitiv keinen einfluss hat ;-)
habs jetzt gelöst mit nem zweiten seperaten frame der die gleichen eigenschaften hat und sich überlappen. nicht sehr elegantz aber klappt.
Aloha ;)
Hoppla - hab ich da grad frame gelesen? Brr, mittelalterliche Methoden sind das...
(Aber mal enrsthaft: Vorsicht mit frames - oft schaffen diese letztlich viel mehr Probleme, als sie auf den ersten Blick beseitigen... Stell dir nur mal vor, du willst zwei Frames gleichzeitig ändern :D okay, letzteres war ein Insider...)
Grüße,
RIDER
@@Camping_RIDER:
nuqneH
Stell dir nur mal vor, du willst zwei Frames gleichzeitig ändern :D okay, letzteres war ein Insider...)
Er hat „Jehova“ gesagt!
(Auch ein Insider, lange vor deiner Zeit.)
Qapla'
(Auch ein Insider, lange vor deiner Zeit.)
Aloha ;)
Made my day :D
Grüße,
RIDER
Aloha ;)
Hoppla - hab ich da grad frame gelesen? Brr, mittelalterliche Methoden sind das...
(Aber mal enrsthaft: Vorsicht mit frames - oft schaffen diese letztlich viel mehr Probleme, als sie auf den ersten Blick beseitigen... Stell dir nur mal vor, du willst zwei Frames gleichzeitig ändern :D okay, letzteres war ein Insider...)
Grüße,
RIDER
sorry ich meinte net frame sondern DIV-Container. Ich bin mit CSS im bilde und halte HTML-Frame für seehr nicht so gut.
Gruß
Hi,
Ich weis das
innerHTML = bla;
überschrieben wird aber ich hab ja auchinnerHTML += bla;
geschrtieben, also in den Div-Container hinzugefügt.
Das kommt auf’s gleiche heraus – erst wird der String zusammengesetzt und geparst, und dann wird der *komplette* Elementinhalt mit neuen Elementen ersetzt, in *beiden* Fällen.
MfG ChrisB