You are not logged in.

  • Login

1

Friday, September 7th 2007, 1:12pm

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:

JavaScript Code

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


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:

HTML Code

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


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

2

Friday, September 7th 2007, 5:02pm

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.

3

Monday, September 10th 2007, 8:56am

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.

4

Monday, September 10th 2007, 10:25am

Jetzt funktioniert alles wieder einwandfrei. Weiß nicht, ob es an der doppelten Variablen lag oder an den Zahlen als ID. Auf jeden Fall hab ich aus dem einen i in der Schleife ein k gemacht, hab die Variable id in identifier umbenannt und aus den ids 0-14 die ids tr_0 - tr_14 gemacht. Vielen Dank für die Hilfe!

Gruß
Rantan

Social bookmarks