Marvin: Ersatz für innerHTML

Hallo,

ich will eine Seite programmieren, die ähnlich wie Ajax Inhalte nachlädt per Javascript. Ich habe mich mit meinem Partner auf XHTML als Subset von XML als Transportsprache geeignet zwischen Javascript und PHP.

Egal, jedenfalls bekomme ich von meinem XmlRequest eine XHTML Datei und die will ich in das richtige Element in meinem vorhandenen Baum einpflanzen.

Ich will dabei keinen veralteten MS Mist mit innerHTML programmieren, weil es ist nicht W3C konform und soll auch noch in Zukunft funktionieren. Wie also kann ich das Element in meinem Baum einfügen ?

element=http_request.responseXML.documentElement.cloneNode();

document.getElementById("div").appendChild(element);

so sollte es sein, aber es funktioniert nicht.
Danke im Voraus, marvin

  1. Hallo Marvin,

    element=http_request.responseXML.documentElement.cloneNode();

    Das wäre dann window.document in der XHTML-File...

    document.getElementById("div").appendChild(element);

    ...welches du in ein <div> verpflanzen willst, oder?

    So rein vom Sinn würde sich ja z.B. der <body>-Node dareinkopieren
    lassen, wobei das keinen Sinn ergibt. Viel eher der Inhalt vom
    <body>-Tag.

    Grüße,

    Sven

    --
    ich hatte mal meterlange signs, die sind alle weg
    1. Hallo Marvin,

      element=http_request.responseXML.documentElement.cloneNode();

      Das wäre dann window.document in der XHTML-File...

      document.getElementById("div").appendChild(element);

      ...welches du in ein <div> verpflanzen willst, oder?

      So rein vom Sinn würde sich ja z.B. der <body>-Node dareinkopieren
      lassen, wobei das keinen Sinn ergibt. Viel eher der Inhalt vom
      <body>-Tag.

      Grüße,

      Sven

      ja, ich habe mich falsch ausgedrückt, es sollen natürlich nur schnipsel sein.

      An sheena: Danke für die Anpragerung, aber ne Lösung für das Problem hast du auch nicht, oder ? Dann werde ich wohl innerHTML verwenden müssen. Ich dachte, es gibt ne bessere Lösung.

      1. hi,

        An sheena: Danke für die Anpragerung,

        Bitte was?

        aber ne Lösung für das Problem hast du auch nicht, oder ? Dann werde ich wohl innerHTML verwenden müssen. Ich dachte, es gibt ne bessere Lösung.

        Hast du die Argumentation der von Jeena verlinkten Artikel verstanden?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. Hallo,

        So rein vom Sinn würde sich ja z.B. der <body>-Node dareinkopieren
        lassen, wobei das keinen Sinn ergibt. Viel eher der Inhalt vom
        <body>-Tag.

        ja, ich habe mich falsch ausgedrückt, es sollen natürlich nur schnipsel sein.

        HTML-Schnipsel sind etwas anderes als XHTML-Schnipsel und der MIME-Typ, mit dem die Daten übertragen werden, istauch wichtig.

        Wenn du XHTML-Syntax bei den Schnipseln verwendest, aber der Standard-HTML-MIMe-Typ text/html genutzt wird, dann fügt der Browser automatisch ein <html><body>...</body></html> hinzu. documentElement wäre dann wie in jedem HTML-Dokument das html-Elementknoten! Zudem ist responseXML gar nicht verfügbar, weil die Daten nicht als X(HT)ML geparst wurden.

        Also müsstest du konsequent XHTML verwenden mit dem MIME-Typ application/xhtml+xml oder, wenn es auch im IE laufen soll, application/xml. Dann ist responseXML verfügbar und eine Ergänzung findet nicht statt, das heißt, documentElement ist z.B. ein div-Elementknoten mit dem weiteren Inhalt.

        Wenn du diesen Knoten hast, musst du ihn mit importNode in das bestehende HTML-Dokument importieren. Letztlich ist innerHTML aber besser, weil dieses Importieren im Internet Explorer nicht funktioniert.

        Mathias

        1. hi,

          Also müsstest du konsequent XHTML verwenden mit dem MIME-Typ application/xhtml+xml oder, wenn es auch im IE laufen soll, application/xml.

          text/xml reicht doch ebenfalls aus.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Hallo,

            Also müsstest du konsequent XHTML verwenden mit dem MIME-Typ application/xhtml+xml oder, wenn es auch im IE laufen soll, application/xml.

            text/xml reicht doch ebenfalls aus.

            Von text/xml ist allgemein abzuraten, denn es gelten beknackte Kodierungsregeln. Deshalb würde ich erst einmal von application/xml ausgehen. Das funktioniert doch im IE?

            Mathias

    2. Hallo,

      element=http_request.responseXML.documentElement.cloneNode();

      Das wäre dann window.document in der XHTML-File...

      Nein, das wäre (wenn es sich um ein vollständiges Dokument handeln würde) der html-Elementknoten. window.document zeigt auf den DOM-Document-Knoten, nicht auf den Wurzelelement-Knoten. Den DOM-Document-Knoten bekommt man bereits über responseXML.

      Mathias

  2. Hallo,

    Ich will dabei keinen veralteten MS Mist mit innerHTML programmieren, weil es ist nicht W3C konform und soll auch noch in Zukunft funktionieren. Wie also kann ich das Element in meinem Baum einfügen ?

    Ähm ... Dogmaalarm!!1 Was heißt veraltet? Und dir ist klar, dass das XMLHttpRequest Objekt auch MS Mist ist, der bisher nirgendwo standartisiert wurde?

    Lesetipp: We all love innerHTML
    This article is co-written with Anne van Kesteren, W3C Member and contributor to the WHATWG and Opera specifications, R&D and QA person.
    [...]
    The fact that it is not in a standard is simply because nobody got around to it. If you read the mailing list of the W3C Web API’s Working Group you can see that Opera, Mozilla and Apple want it to be standardized and we bet Microsoft would like the same thing.

    Lesetipp: What's wrong with innerHTML?
    I know Jeremy Keith's position on this but I still don't understand why him and others are so against innerHTML. Sure it's not part of a standard (yet) but neither is the XMLHttpRequest object (yet).

    Grüße
    Jeena Paradies