Tim Ruffing: Fehler bei appendChild in Mozilla

Hallo,

ich will einen Knoten mit appendChild in die Dokumentstruktur einsetzten. Mit dem IE funktioniert das auch wunderbar. Im Mozilla krieg ich folgendene Fehlermeldung in der Konsole:
Error: uncaught exception: [Exception... "Node cannot be inserted at the specified point in the hierarchy"  code: "3" nsresult: "0x80530003 (NS_ERROR_DOM_HIERARCHY_REQUEST_ERR)"  location: "file:///Z:/html/UNO/uno.js Line: 276"]

Das sollte aber eigentlich gehen. Ich erzeuge damit auch korrektes HTML. Was soll ich tun?

Tschüss
Tim

  1. Hallo,

    Du kannst an dieser Position nicht dein Element einfügen, da es dort laut Spezifikation nicht hingehört. Du musst Dir mal anschauen wie die Normale Baumhirarchie für das Element ist. Der IE prüft wahrscheilch nicht richtig und führt mal wieder was aus, was er eigentlich nicht dürfte.
    Da ich nicht weiss was Du machst kann ich nicht mehr sagen.

    Als Beispiel, man kann ein TR nicht an ein table hängen, man muss an das table erst ein tbody hängen und daran das tr , tbody wird auch oft vergessen(Im IE geht es auch ohne).
    Nehme an Du hast ein ähnliches Problem.

    Mike

    1. Hallo,

      Hallo

      Da ich nicht weiss was Du machst kann ich nicht mehr sagen.

      Ich will ein Button-Element mit type=button in ein div einhängen. Ist das etwa nicht erlaubt?

      Mike

      Tim

      1. Hi!

        Ich will ein Button-Element mit type=button in ein div einhängen. Ist das etwa nicht erlaubt?

        Doch. Genauso wie es auch erlaubt ist ein tr in ein table zuhängen, da tbody ein optionales Element ist.
        Allerdings kann man ohne den Quelltext von Script und HTML nix sagen.

        So sollte es eigentlich gehen (mit der Beschränkung das das Dokument als html behandelt werden muss, also weder als xml noch als xhtml an den Mozilla geliefert werden darf):

        var d = document.getElementBy('div_id');
        var b = document.createElement('button');
        b.type = 'button';
        d.appendChild(b);

        Gruß Herbalizer

        1. Hi!

          Hallo

          Doch. Genauso wie es auch erlaubt ist ein tr in ein table zuhängen, da tbody ein optionales Element ist.

          Der DOM Insceptor zeigt mir keine optionalen Elemente mehr an. Der zeigt z.B. Tbody an auch wenn es nicht im Quelltext steht.

          So sollte es eigentlich gehen (mit der Beschränkung das das Dokument als html behandelt werden muss, also weder als xml noch als xhtml an den Mozilla geliefert werden darf):

          var d = document.getElementBy('div_id');

          var d = document.getElementById('div_id');

          var b = document.createElement('button');
          b.type = 'button';
          d.appendChild(b);

          Eine Besonderheit bei mir ist es dass ich den Knoten vorher mit cloneNode(false) aus dem Dokument nehme. Dann verändere ich die ID und hänge ihn wieder ein.

          Gruß Herbalizer

  2. Hallo,
    ohne Quelltext lässt sich da wenig sagen.
    Es gibt bei DOM2 (und nicht Mozilla-spezifisch) bestimmte Regeln mit Knoten umzugehen. Dann sind IDs case-sensitive.
    Zur Fehlersuche könntest Du erstmal hasChildNodes() einsetzen.
    alert(document.getElementById("test").hasChildNodes());
    Ist ein Childnode schon vorhanden, kannst Du natürlich nicht appendChild einsetzen, sondern könntest mit innerHTML arbeiten.
    Willst Du einen Knoten kopieren,muss der Knoten als solche definiert sein. Ansonsten nimm innerHTML, welches dann auch für den IE4 kompatible ist. Zum Prüfen kannst Du auch contains benutzen, was nur der IE4 beherrscht, und Dir die Unterschiede beider Browser anzeigen lassen.
    Besser wäre natürlich der Quelltext ;-)Kannst mir auch mailen..

    Von mozilla.org gibt es auch einen guten JavaScript-Debugger zum Download. Der DOM-Inspektor reicht hier nicht, weil er IMHO nur mit dem Urquelltext korrekt arbeitet.

    Gruss

    Michael