JavaScript Arrays schrumpft in for-Schleife?!

meranoid

Cadet 1st Year
Registriert
Feb. 2012
Beiträge
13
Hallo zusammen....

Ich habe ein Problem in folgendem Code:

Code:
var tables;
tables = document.getElementById("eineDivID").getElementsByTagName("table");	
for (j = 0; j < tables.length; j++) {
	document.getElementById(id).removeChild(tables[j]);
}

Mit jedem Durchlauf der Schleife wird tables.length um 1 kleiner. Dadurch, das j trotzdem erhöht wird hört die Schleife natürlich auf bevor alles gelöscht ist...
Dabei lösche ich doch gar nicht aus dem Array tables, sondern direkt aus dem document... oder?

Ich habe das inzwischen in eine funktionierende while-Schleife umgebaut, aber mich würde dennoch interessieren warum das da nicht funktioniert.
 
Da ist ein kleiner Logik Fehler.
Du löscht nicht das Array, das ist richtig, aber du löscht ja die Childs des Tables, diese rücken auf, deswegen bist du irgentwann mit deiner Zählvariable über den Anzahl der Childs ab dann wird nichts mehr gelöscht.

So müsste das gehn :)

MfG
EpicFace

Code:
var tables;
tables = document.getElementById("eineDivID").getElementsByTagName("table");
if ( tables.hasChildNodes() )
{
   while ( tables.childNodes.length >= 1 )
   {
      tables.removeFromParent(tables.firstChild );       
   } 
}
 
Zuletzt bearbeitet:
MDN sagt "The returned list is live, meaning that it updates itself with the DOM tree automatically."
Heißt, du bekommst nicht ein simples Array, sondern ein NodeList zurück:
https://developer.mozilla.org/en/DOM/element.getElementsByTagName

So sollte es funktionieren:

var element = document.getElementById("eineDivID");
var tables = Array.prototype.slice.call(element.getElementsByTagName("table"));
for (var j = 0; j < tables.length; j++) {
element.removeChild(tables[j]);
}

Oder:
var element = document.getElementById("eineDivID");
var tables = element.getElementsByTagName("table");
while (tables.length > 0) {
element.removeChild(tables[0]);
}

MDN ist mit Abstand die beste Quelle für JS, außer dass die Navigation umständlicher ist, als Google zu bemühen, MDN zu durchsuchen ;)
Ergänzung ()

Sorry: "odeList are used very much like arrays and it would be tempting to use Array.prototype methods on them. This is, however, impossible."

Also funktioniert wohl nur die zweite Variante mit while...
 
ok... also speichere ich im prinzip nur einen verweis... danke... :)
 
Ich habe es dir doch schon gesagt in meinem Beitrag, wenn du mehr wissen möchtest rede ich auch gern im Teamspeak mit dir und versuche es dir besser zu erkären.
 
metadings beschreibt genau das was ich wissen wollte...
nämlich das ich eben nicht ein statisches array mit den elementen drin speichere, welches sich nicht ändern dürfte... davon war ich ursprünglich ausgegangen.

es speichert eine liste die sich automatisch mit dem dom-tree aktualisiert, wieder was gelernt.
hätte ich zugegebener maßen auch selbst rausfinden können. MDN wandert dann mal in meine favoriten ^^
 
Zurück
Oben