Edgar Ehritt: DIV-Inhalte austauschen

Beitrag lesen

Re:

for (var i = 0; i < div.childNodes.length ; i++)

{
if (div.childNodes[i].firstChild)
{
   text = text + div.childNodes[i].firstChild.nodeValue
   div.removeChild(div.childNodes[i].firstChild)

// Du machst etwas grundsätzliches falsch.
   // div.childNodes[i] wird nämlich in diesem Fall nicht gelöscht

}
else
    {
    text = text + div.childNodes[i].nodeValue;
    div.removeChild(div.childNodes[i])
    }
}

  
also wäre Folgendes für Dein eigentliches Ansinnen exakter (aber dennoch falsch, dazu aber gleich mehr):  
  
~~~javascript
for (var i = 0; i < div.childNodes.length ; i++){  
	if (div.childNodes[i].firstChild){  
		text = text + div.childNodes[i].firstChild.nodeValue  
		div.removeChild(div.childNodes[i].firstChild)  
	}  
	else{  
		text = text + div.childNodes[i].nodeValue;  
	}  
	// jetzt wird immer gelöscht  
	div.removeChild(div.childNodes[i])  
	// Testausgabe 1:  
	alert(div.childNodes.length);  
}  
// Testausgabe 2:  
alert(div.childNodes[0].nodeName);

Nun zu Deinem eigentlichen Fehler: div.childNodes.length verändert sich, wie "Testausgabe 1" verdeutlichen soll. Im ersten Durchlauf hast Du also noch volle vier Elemente, ziehst aber dann ein Element ab. Anders als bei einem array, den div.childNodes ist kein array sondern ein NodeList rutscht beim Löschen des ersten Elements das vormalig Zweite Element an die erste Stelle. Daher habe ich mit while (also ohne Zähler) gearbeitet.
"Testausgabe 2" bestätigt dieses Verhalten, denn nach Deiner for-Schleife ist das erste Element (.childNode[0]) immernoch belegt.

Leider gibt es noch einen weiteren, logischen Fehler in Deinem Programm:

<div>Wo warst du?<br/>  
   <p>Freu mich auf <span>deine</span> Erzählung</p>  
</div>

Hierbei wird der Inhalt <span> durch div.childNodes[i].firstChild nicht berücksichtigt. Es tut mir leid. Du musst es leider rekursiv angehen. ;(

Gruß aus Berlin!
eddi

--
Wer mit Kanonen auf Spatzen schießt, mag zwar immernoch Augen für die Tauben auf dem Dach haben, aber keine Hand mehr zum reichen.