JavaScript geht seltsame Wege...

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • JavaScript geht seltsame Wege...

    Hi!

    Hab keine passende Überschrift für mein Problem gefunden. Ich sitze schon seit Tagen an dem gleichen Problem. Ich hoffe, es ist nur ne Kleinigkeit...

    Ich habe also folgenden JavaScript Code:

    Quellcode

    1. function remove() {
    2. if (http2.readyState == 1) {
    3. return false;
    4. } else if (http2.readyState == 2) {
    5. return false;
    6. } else if (http2.readyState == 3) {
    7. return false;
    8. } else if (http2.readyState == 4) {
    9. if (http2.status == 200) {
    10. var daten = http2.responseXML;
    11. var ergebnisse = daten.getElementsByTagName("element");
    12. var nextelement = daten.getElementsByTagName("content");
    13. var lastcontentid = null;
    14. if (ergebnisse.length > 0) {
    15. for (var i = 0; i < ergebnisse.length; i++) {
    16. var id = null;
    17. var eintrag = ergebnisse[i];
    18. for (var j = 0; j < eintrag.childNodes.length; j++) {
    19. with (eintrag.childNodes[j]) {
    20. if (nodeName == "id") {
    21. id = firstChild.nodeValue;
    22. }
    23. }
    24. }
    25. var tdtmp = document.getElementById(id + "_Id");
    26. if (tdtmp != null) {
    27. var parent = tdtmp.parentNode;
    28. var parentid = parseInt(parent.getAttribute("id"));
    29. for (var i = parentid; i < 14; i++) {
    30. var tr = document.getElementById("" + i);
    31. var td1 = tr.getElementsByTagName("td");
    32. tr = document.getElementById("" + (i+1));
    33. var td2 = tr.getElementsByTagName("td");
    34. alert(td1 + ", " + td1.length);
    35. }
    36. }
    37. }
    38. }
    39. }
    40. }
    41. requestRemove("http://werum1062.werum.net:8080/remove");
    42. }
    Alles anzeigen


    Es kommen also XML-Daten an und werden gespeichert. Zum einen ist es die ID eines Elements, das aus einer Tabelle gelöscht werden soll und Daten eines Elements, dass unten an die Liste angehängt werden soll. Mit Hilfe der ID wird nun das entsprechende <td>-Element aus der Tabelle rausgesucht und dann wird die ID des <tr>-Elternelements rausgesucht. Die ID des <tr>-Elements wird als "parentid" gespeichert. Nun wird an dem Punkt eingestiegen und das jeweils nächste Element wird um eine Zeile nach oben verschoben. Am Ende kommt dann das neue Element in die letzte Zeile. So erreiche ich die Löschung des geforderten Elements und das ist aufgrund der Anforderungen auch nicht anders möglich.

    Das Problem, dass sich mir nun stellt ist, dass nicht alle Elemente der Tabelle gefunden werden. Nehmen wir in diesem Beispiel an, dass die parentid den Wert 6 hat. Beim Versuch die <td>-Elemente der Zeile mit der ID 6 zu holen, bekomme ich ein Array mit der Länge 0 zurück. Das gleiche passiert bei den IDs 7 und 8. Erst ab der ID 9 findet er dort Elemente. Und das obwohl alle Tabellenzeilen im gleichen Schritt und auf die gleiche Weise erzeugt werden. Und dazu kommt, dass es vorher auch mal prima funktioniert hat...

    Die eben angesprochenen Tabellenzeilen sehen so aus:

    Quellcode

    1. <tr id='6'>
    2. <td id='242407456_Id'><a href=javascript:requestDetails('242407456')>242407456</a></td>
    3. <td id='242407456_Status'>RUNNING</td>
    4. </tr>
    5. <tr id='7'>
    6. <td id='242407460_Id'><a href=javascript:requestDetails('242407460')>242407460</a></td>
    7. <td id='242407460_Status'>RUNNING</td>
    8. </tr>
    9. <tr id='8'>
    10. <td id='242407464_Id'><a href=javascript:requestDetails('242407464')>242407464</a></td>
    11. <td id='242407464_Status'>RUNNING</td>
    12. </tr>
    13. <tr id='9'>
    14. <td id='242407468_Id'><a href=javascript:requestDetails('242407468')>242407468</a></td>
    15. <td id='242407468_Status'>RUNNING</td>
    16. </tr>
    17. <tr id='10'>
    18. <td id='242407472_Id'><a href=javascript:requestDetails('242407472')>242407472</a></td>
    19. <td id='242407472_Status'>RUNNING</td>
    20. </tr>
    21. <tr id='11'>
    22. <td id='242407476_Id'><a href=javascript:requestDetails('242407476')>242407476</a></td>
    23. <td id='242407476_Status'>RUNNING</td>
    24. </tr>
    Alles anzeigen


    Ich hoffe jemand findet hier nen Fehler, der das Phänomen erklärt. In den meisten Fällen haben solche Probleme ja nur eine kleine Ursache, die dem Programmierer einfach nicht auffällt. Schonmal vielen Dank im Voraus!

    Gruß
    Rantan
  • Hi,
    findest du das nicht auffällig: document.getElementById("" + zahl) einen leeren String hinzuzuschreiben...
    Man sollte keine Zahlen als IDs verwenden. Auch der Variablenname "id" ist reserviert und sollte nicht überschrieben werden.
    Außerdem verwendest du die Variable i in 2 Schleifen.

    Das sind nur die Sachen die mir direkt aufgefallen sind. Weiter habe ich mich nicht in die Logik eingearbeitet. Vielleicht hilfts schon.
  • Ja, da hast du schon recht. Das ist noch ein Überbleibsel aus meiner Probierphase. Ich kämpfe ja schon länger damit rum und hab dann gelesen, dass es bei JavaScript Probleme mit den Typen geben kann. Darum hab ich das mal so probiert, weil ich dachte, dass er dann auf jeden Fall nen String dort hat. Sind aber alles schonmal gute Tips. Ich werde das mal eben umsetzen und dann melde ich mich wieder.