Benni: DOM Fehler

Hallo Leidensgenossen!

Zugriffe auf diverse node-Objekte über DOM im IE6 sind bei mir entweder schwerst beschädigt oder aber ich kanns nicht mehr. Die simple Schleife

for (var Knoten = document.getElementById('root'); Knoten!=null; Knoten=Knoten.nextSibling) {
    document.write('Habe Knoten mit dem Namen ', Knoten.nodeName, ' gefunden.<br>');
    document.write('Das erste Kind (von ', Knoten.childNodes.length, ') heisst: ', Knoten.childNodes[0].nodeName, '<br>');
    document.write('Seine ID lautet: '+Knoten.getAttribute('id'), '<br>');
}

funktioniert ganz einfach nicht so, wie ich mir das vorstelle. Beim zweiten document.write erhalte ich den Fehler "Objekt erforderlich". Schreibe ich alle document.write-Anweisungen in eine einzige, bricht die Schleife nach einem einzigen Durchlauf ab, obwohl noch weitere folgen müssten ('root' ist ein <TR>, es folgen noch mindestens 10 Stück davon, die - nach meinem Verständnis - mit .nextSibling abrufbar sind). Auch ein Zähler und Zugriff über .parentNode.childNodes[Zähler] schlug auf gleiche Weise fehl.

Auch step-by-step (d.h. keine Schleife, sondern jeder einzelne Schleifendurchlauf einfach untereinander geschrieben) brachte keine Erfolge, sondern Fehler.

Das Beispiel unter

http://de.selfhtml.org/javascript/objekte/anzeige/node_next_sibling.htm

funktioniert auch nicht mehr, wenn ich es in meine Datei kopiere und dort aufrufe. Es ist verhext! Auch hier nur ein einziger Schleifendurchlauf.

Was jedoch wunderbar funktioniert, ist der Zugriff auf jeden einzelnen Knoten (d.h. wenn ich var Knoten auf (..).nextSibling setze, erhalte ich _ein_ richtiges Ergebnis) - nur eben nicht auf mehrere nacheinander, z.B. mit Hilfe der Schleife, so wie es erwünscht ist.

Ist jemandem ein derartiger Fehler schon selbst in diesem Zusammenhang begegnet oder kann mir vielleicht jemand mitteilen, auf was ich zu achten habe, damit das Ding endlich so läuft, wie es soll? Ich bin sicher, die Lösung ist ganz einfach, ich sehe sie nur nicht.

Danke für die Aufmerksamkeit,
--Benni;

  1. Hi,

    for (var Knoten = document.getElementById('root'); Knoten!=null; Knoten=Knoten.nextSibling) {
        document.write('Habe Knoten mit dem Namen ', Knoten.nodeName, ' gefunden.<br>');

    Du rufst diesen Code NACH Beenden des ersten Renderings der Seite auf?
    Falls ja, überschreibt document.write das komplette Dokument, so daß der Knoten beim zweiten document nicht mehr existiert.

    http://de.selfhtml.org/javascript/objekte/anzeige/node_next_sibling.htm
    funktioniert auch nicht mehr, wenn ich es in meine Datei kopiere und dort aufrufe.

    Dort wird das document.write WÄHREND des ersten Renderings der Seite aufgerufen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Du rufst diesen Code NACH Beenden des ersten Renderings der Seite auf?
      Falls ja, überschreibt document.write das komplette Dokument, so daß der Knoten beim zweiten document nicht mehr existiert.

      Dies war das Problem. Speichern der einzelnen Texte aus den document.write()-Anweisungen in einer Variablen und Ausgabe mit document.write() oder alert() nach Durchlauf der Schleife hat das Problem gelöst.

      Vielen Dank für die schnelle Hilfe und die Hinweise (auch der anderen Helfer)!
      --Benni;

  2. Hallo Benni.

    Beim zweiten document.write erhalte ich den Fehler "Objekt erforderlich".

    Dein Script steht sicher im Kopfbereich und wird als Funktion aufgerufen, oder? Wenn es so ist, dann schau dir mal den Quelltext der Seite an, wo die Fehlermeldung kommt, du wirst erstaunt sein. Ersetze zu Testzwecken mal alle document.write durch ein einfaches alert. Und teste dein JS mal in einem richtigen[tm] Browser, es bietet sich Mozilla oder Firefox an, die dortige JS-Konsole liefert wenigstens aussagekräftige Fehlermeldungen.

    Freundschaft!
    Siechfred

    --
    Hinweis an alle Karnevalsmuffel: Aschermittwoch ist alles vorbei.
  3. Hallo Benni,

    Zugriffe auf diverse node-Objekte über DOM im IE6

    da sitzt das Problem. Ich hatte auch schon einige Probleme mit dem DOM bei Tabellen im Internet Explorer. Soweit ich mich erinnern kann verwendet der IE für Tabellen ein seperates Objekt-Modell, jedenfalls im Quirks-Modus. Such mal in der MSDN Library((link:http://msdn.microsoft.com/library]) nach den Collections rows und cells. Ich würde ja den direkten Link schreiben, hab aber die MSDN offline auf CD.

    Gruß,
    Martin