ctx: Array Elemente werden nicht ausgegeben HTML 4.01

guten Abend,

zurSache:

  • Ich habe zwei Arrays mit undefinierten Index im onload erstellt und alle weiteren globalen
    variablen für die Funktionen.
  • ich will in einem Div-container erstellte Elemente eines Arrays ausgeben.
  • Die zwei Divs sind verschachtelt

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

  1. 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

    --
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
    1. besten Dank. Du wart mir ne große hilfe
      mfG

    2. 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 ;-)

      1. habs jetzt gelöst mit nem zweiten seperaten frame der die gleichen eigenschaften hat und sich überlappen. nicht sehr elegantz aber klappt.

        1. 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 a.k.a. Riders Flame a.k.a. Janosch Zoller
          ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
          1. @@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'

            --
            „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
            1. (Auch ein Insider, lange vor deiner Zeit.)

              Es war einmal ...

              1. Aloha ;)

                Es war einmal ...

                Made my day :D

                Grüße,

                RIDER

                --
                Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
                ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
          2. 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ß

      2. Hi,

        Ich weis das innerHTML = bla; überschrieben wird aber ich hab ja auch innerHTML += 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

        --
        Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/