Fehler bei JS innerHTML?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Die Fehlermeldung sagt, dass "innerHTML" nicht auf auf einem Objekt mit dem Wert undefined gefunden werden kann.

Mit einem Blick auf die Zeilenangabe und deinem Source Code ist damit die Variable div_container_inner gemeint. Sie ist also in dem Fall undefined.

Das undefined kommt aus der Zeile davor, wo die Variable ihren Wert bekommt.

document.getElementsByTagName() gibt dir alle DOM Elemente (eine Liste) mit dem Tag "a" (in deinem Fall). Genauer gesagt wird dir eine HTMLCollection zurückgegeben.

Auf der Collection willst du den ersten Eintrag i bekommen. Laut der Dokumentation gibt dieser Aufruf undefined zurück, wenn es unter dem Index keinen Eintrag gibt. Hier kommt dein undefined her.

In deiner HTML Datei ist kein a Elemente vertreten, sodass alle möglichen a Elemente in Javascript generiert werden müssen bzw. generiert worden sind.

Ein paar Zeilen darüber setzt du a Elemente in dein DOM. Bei jedem Durchlauf der Schleife setzt du ein neues Elemente, sodass getElementsByTagName() mindestens ein Element garantiert ist.

Dein Problem ist der verwendete Index. Deine Schleife geht von 1 bis (length_array - 1). JavaScript nutzt allerdings ein Zero-based Index und so auch die HTMLCollection.

Mit dem Index 1 möchtest du den zweiten Eintrag abrufen. Es ist allerdings nur ein Eintrag in der Liste vorhanden. Dein Index ist also out-of-bound und gibt undefined zurück.

Beim zweiten Durchlauf ist ein a Element aus dem vorherigen Versuch noch im DOM. Es wird erneut ein a Element hinzugefügt, sodass 2 Elemeten vorhanden sind. Unter dem Index 1 gibt es jetzt ein Eintrag.

Die Lösung: Deine for Schleife muss bei i = 0 beginnen. Der Endwert ist korrekt.

Dein UI Problem liegt daran, dass du jedes Mal nur neue a Elemente hinzufügst und die alten nicht entfernst. Vielleicht ist es auch so von dir gewollt.

Dazu fügst du deine neuen a Elemente am Ende an. In dem zweiten Teil deiner Schleife beginnst du beim Ändern der a Elemente von Vorne an. Dazu umfasst diese Liste alle a Elemente im DOM. Dazu gehören auch die Elemente aus den vorherigen Durchläufen.

Du überschreibst also die ersten Elemente und fügst leere Elemente am Ende hinzu.

white47583 
Fragesteller
 11.11.2022, 20:01

Einfach nur noch vielen vielen Dank. Danke, dass du dir so viel Mühe gegeben hast. Ich testen das gleich, aber ich denke jz auch das es daran liegt. Danke

0

Leider ist nicht zu sehen wie du load array aufrufst. Könntest Du den code hier pasten?

pushido  11.11.2022, 15:18

Ich glaube, das Problem ist bei Zeile 80. Innerhtml wird nicht gefunden und deshalb wird nichts initialisiert.

0
white47583 
Fragesteller
 11.11.2022, 15:26

Hi. Leider hab ich den Code noch nicht comittet, ich schreibe uhn hier sobald ich Zuhause bin. Zu deinem Kommentar kannst du mir erklären wie du das meinst ? LG white

0
pushido  11.11.2022, 15:52
@white47583

Nach Zeile 80 würde ich eine If Abfrage platzieren um festzustellen, ob div_container_inner nicht leer ist. falls es nicht leer ist, würde ich die Zeile 81 in der If bedingung ausführen.

0
white47583 
Fragesteller
 11.11.2022, 17:38
@pushido

Das teste ich gleich nacher wenn ich wieder am PC bin. Danke für deine Mühe

0