Kai345: Filterung eines mehrdimensionalen Arrays

Beitrag lesen

Grütze .. äh ... Grüße!

Tabellenbereich = document.getElementById("Container");
     document.getElementById("Datenbank").appendChild(Tabellenbereich);

Hier hängst du das in der ersten Zeile ermittelte tbody-element mit der ID Container an das table-Element mit der ID Datenbank an, also genau das, was du im HTML eh schon so definiert hast. Die zweite Zeile hat daher _so_ keinen Sinn. ABER .. da du die Tabelle jedesmal nur mit den Ergebnissen des neuen Kriteriums bestücken willst, brauchen wir vielleicht sowas ähnliches doch noch. Dazu weiter unten mehr.

In der Schleife sehe ich mehrfach die Zeile
Zelle.id = "Zelle" + i;
Das geht nicht, da eine ID einmalig sein muß!

Ich würde das, wenn du die ganzen IDs _überhaupt_ brauchst (ich wüßte jetzt nicht wozu eigentlich?) folgendermaßen machen:

Zelle.id = "Zelle" + i + "1";
Zelle.id = "Zelle" + i + "2";
Zelle.id = "Zelle" + i + "3";
Zelle.id = "Zelle" + i + "4";
Zelle.id = "Zelle" + i + "5";

Damit hast du dann:
Zelle01 Zelle 02 Zelle03 Zelle04 Zelle05
Zelle11 Zelle 12 Zelle13 Zelle14 Zelle15
Zelle21 Zelle 22 Zelle23 Zelle24 Zelle25
usw.

Zeile = document.createElement("tr");

...

document.getElementById("Zeile" + i).appendChild(Zelle);

document.getElementById ist hier unnötig, genau diese Referenz hast du schon in der Variablen "Zeile" weiter oben stehen.

Zeile.appendChild(Zelle)

Zelle = document.createElement("td");
       td.setAttribute("style","white-space:nowrap;");

Äh ... du meinst hier sicher "Zelle" , den die Variable "td" ist nicht definiert.
Außerdem weg mit setAttribute, kann zu Problemen im IE führen..

Zelle.style.whiteSpace = "nowrap".

Regel: Bindestriche von css-eigenschaften entfallen und der erste Buchstabe des folgenden Wortes wird groß geschrieben. Zu Risiken und Nebenwirkungen konsultieren sie ihre SelfHTML-Dokumentation in Bereich Objektreferenz style

Ansonsten siehst du ja, daß du einige Programm-Zeilen immer wieder schreiben mußt
und nur der Text-Node sich ändert, dazu bietet sich eine zweite Schleife geradezu an. Aber das klären wir, wenn meine Kopfschmerzen mal nicht so stark sind ;)

Außerdem fehlt noch die "Löschung" der eventuell vorhandenen alten Tabelleninhalten.
Da du ja mit appendChild arbeitest, würde zur Zeit die Tabelle immer wieder erweitert
werde, ohne daß die alten Filme verschwinden.

Ich schlage folgendes vor:

Erzeuge einen tbody:

var Tabellenbereich = document.createElement("tbody");
Tabellenbereich.id = "Container"

und dann kommt der ganze Rest der Erzeugung mit der for-Schleife

und _hinter_ der For-schleife, also zwischen den beiden Klammern "}"

ersetzt du den gesamten tbody mit replaceChild (und hier kommen wir auch wieder auf die weiter oben gemachte Bemerkung zurück:

document.getElementById("Datenbank").replaceChild(Tabellenbereich, document.getElementByID("Container"));

Ich weiß echt nicht mehr weiter... Es ist frustrierend, wenn sich ein ansich einfach anhörendes Projekt zu solch einem "Problem-Monster" wandelt.

Ich kenne das ganz genau, hatte das vor sehr kurzer zeit auch. Aber genau aus diesem Grunde habe ich dir auch bisher keine fertige Lösung hingezaubert auch wenns mir jedes Mal in den Fingern juckt, damit du die Sache auch nachvollziehst, testest und eben diese Fehler auch machst. Denn beim nächsten Mal machst du sie dann üblicherweise nicht mehr.

Ich hatte es mir sehr einfach vorgestellt:

Die Sachen, die einfach aussehen, entwickeln sich oft zu kleinen Monstern ;)

Zu meinem ganzen Beitrag kann ich nur sagen, er wurde unter leicht eingeschränkten Voraussetzungen geschrieben (mein Kopfschmerz halt) und daher kann es leicht passiert sein, daß mir ein Flüchtigkeits- oder Denkfehler unterlaufen ist. Also nicht unbedingt davon ausgehen, daß mein Code 100% ist.


Kai

--
What is the difference between Scientology and Microsoft? One is an
evil cult bent on world domination and the other was begun by L. Ron
Hubbard.
ie:{ fl:( br:< va:) ls:? fo:| rl:? n4:° ss:{ de:] js:| ch:? mo:| zu:|