Ergebnis 1 bis 10 von 10
  1. #1
    me123 ist offline Grünschnabel
    registriert
    02-10-2012
    Beiträge
    2

    getElementById dateiübergreifend?

    Hallo,

    ich möchte per getElementById zwei divs auswählen und das eine mit dem anderen ersetzen. Das geht ja ganz einfach mit
    Code:
    alt = document.getElementById('altesdiv');
    
    if (alt) {
      neu = document.getElementById('neuesdiv');
      alt.parentNode.replaceChild(neu, alt);
    }
    Was ist jetzt aber, wenn das neue div in einer anderen Datei liegt? Kann ich irgendwie sagen, dass das getElementById auf eine andere Datei (die aber auf der gleichen Domain liegt) angewendet werden soll?

    Gruß
    me123

  2. #2
    Kasalop ist offline Routinier
    registriert
    29-08-2012
    Beiträge
    398

    AW: getElementById dateiübergreifend?

    du musst diese andere datei laden (beispielsweise per DOMParser oder ajax (responseXML)) und dann kannst du darauf zugreifen wie auf eine andere datei und kannst dort mit den normalen DOM Methoden navigieren.

    Lg Kasalop

  3. #3
    Avatar von scrypter
    scrypter ist offline Haudegen
    registriert
    25-06-2011
    Beiträge
    706

    AW: getElementById dateiübergreifend?

    sehr simpel, allerdings mit jQuery, ist es mittels .load()
    Code:
    $('#zielDivParent').load('test.html #quellDiv');
    ohne jQuery ginge es z.B. so
    man könnte einen unsichtbaren iframe ins DOM einhängen, dort die Datei mit dem Quelldiv hineinladen und mit iframe-onload eine copy-Funktion aufrufen, die z.B per innerHTML den Inhalt in das Zieldiv kopiert
    Code:
    // vorher iframe erzeugen, document laden und innerhalb der copy-Funktion dann
    
    document.getElementById('zielDiv').innerHTML = window.frames['temporaryIframeName'].document.getElementById('quellDiv').innerHTML;
    danach den iframe wieder aus dem DOM entfernen (die SOP ist bei gleicher Herkunft ja hier kein Hindernis)

    für outerHTML wird's etwas komplexer (siehe), ginge aber auch
    Code:
    // vorher iframe erzeugen, document laden und innerhalb der copy-Funktion dann
    
    function getOuterHTML(node) {
        return node.outerHTML || (function(n) {
            var div = document.createElement('div'),
                h;
            div.appendChild( n.cloneNode(true) );
            h = div.innerHTML;
            div = null;
            return h;
        })(node);
    }
    
    document.getElementById('zielDivParent').innerHTML = getOuterHTML(window.frames['temporaryIframeName'].document.getElementById('quellDiv'));
    fatal error: EBKAC (error between keybord and chair)

  4. #4
    Kasalop ist offline Routinier
    registriert
    29-08-2012
    Beiträge
    398

    AW: getElementById dateiübergreifend?

    Das per Iframe zu lösen ist aber nicht grad guter Stil. Was spricht deiner Meinung gegen AJAX, scryper?

    Lg Kasalop

  5. #5
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: getElementById dateiübergreifend?

    Zitat Zitat von Kasalop Beitrag anzeigen
    Das per Iframe zu lösen ist aber nicht grad guter Stil. Was spricht deiner Meinung gegen AJAX, scryper?
    Ist im Prinzip das gleiche. Gegen iframe sprciht eigentlich nur, dass das Eventhandling u.U. schwieriger ist

  6. #6
    Kasalop ist offline Routinier
    registriert
    29-08-2012
    Beiträge
    398

    AW: getElementById dateiübergreifend?

    hm. und wie willst du beispielsweise an die Requestheader kommen, wenn du ein iFrame nutzt? oder noch besser: diese setzten? (evtl fehlt mir hier auch das wissen, aber meiner Meinung nach geht dies mit einem iFrame nicht) Weiterhin brauchst du mehr logik, wenn du beispielsweise mehrere asyncrone Requests parallel haben willst, du musst die temp iFrames verwalten. Du bekommst die Statuscodes bei ajax zurück, etc etc

    Lg Kasalop

  7. #7
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.757

    AW: getElementById dateiübergreifend?

    @Kasalop: warum willst du da die Requestheader haben/ändern/setzen? Bei mehreren parallelen Requests musst du auch die XHR-Objekte irgendwie verwalten... Statuscodes bekommst du bei iFrames zwar nicht, aber die Hauptunterscheidung bekommst du durch die Events onload bzw. onerror (mehr will ich bei AJAX ehrlich gesagt auch nicht wissen... ob das jetzt 200 oder 304 ist, ist im Skript meistens völlig wurscht).

    Ich würde trotzdem AJAX nehmen - auch ohne jQuery.

    PS: Ach, und bevor jemand auf die Idee kommt, Nodes direkt von einem Dokument in anderes zu kopieren (also mit .replaceChild o.Ä.): das funktioniert in manchen Browsern - in manchen nicht, da die Nodes wissen, in welchem document sie erzeugt wurden und dann auch nur da verwendet werden dürfen.

  8. #8
    Kasalop ist offline Routinier
    registriert
    29-08-2012
    Beiträge
    398

    AW: getElementById dateiübergreifend?

    Zitat Zitat von kkapsner Beitrag anzeigen
    @Kasalop: warum willst du da die Requestheader haben/ändern/setzen? Bei mehreren parallelen Requests musst du auch die XHR-Objekte irgendwie verwalten... Statuscodes bekommst du bei iFrames zwar nicht, aber die Hauptunterscheidung bekommst du durch die Events onload bzw. onerror (mehr will ich bei AJAX ehrlich gesagt auch nicht wissen... ob das jetzt 200 oder 304 ist, ist im Skript meistens völlig wurscht).

    Ich würde trotzdem AJAX nehmen - auch ohne jQuery.
    Danke
    Ich will die Header durchaus mal haben. Wenn nen Fehlerpassiert interessiert meine Anwendung schon, ob die API komplett ausm netz genommen wurde 404 oder ob der server nur grad down ist ("internal server error") oder ob mein zugang dafür abgelaufen ist (forbidden), etc. REST Services kann ich so auch einfacherer ansprechen bzw bedienen. Warum ich die Header setzten will? wieso nicht? evtl will ich nen cookie dran hängen was aber nicht im browser auftauchen soll, oder ich will einen anderen Benutzer vortäuschen (Ich hab eine Anwendung die eine andere Steuert, der user muss sich dafür bei mir registrieren, und kann (damit mir die benutzerzugangsdaten nicht bekannt sind), einen cookie eintragen, der dann zum ansprechen seiner Sitzung verwendet wird, den muss ich mitsenden und kann ihn aber nicht auf die domain setzten, da es ja eine fremde ist). mit iframes kann ich nicht auf eine andere domain zugreifen mit jsonp aber schon (wobeis mit dem allow-origin-pla header glaub auch mit iframes gehen müsste, aber dafür muss ich meine serveranwendung anpassen).

    Den overhead würde ich gerne mal testen... ich hab mich näher noch nicht mitbeschäftigt, was man bei iframes alles beeinflussen kann / auslesen kann, was passiert, wenn ich nur ein fragment senden will und kein ganzes dokument, gibt es szenarien, wo ich probleme mit dem enconding bekomme? etc

    Lg Kasalop

  9. #9
    Avatar von scrypter
    scrypter ist offline Haudegen
    registriert
    25-06-2011
    Beiträge
    706

    AW: getElementById dateiübergreifend?

    via iframe (ohne ajax) sollte nur eine weitere Variante darstellen, ajax ist in jedem Fall sinnvoller
    und dass das direkte kopieren, was kkapsner ansprach, nicht funzt, ist klar, daher der wiggel mit innerHTML/outerHTML
    Geändert von scrypter (07-10-2012 um 01:18 Uhr)
    fatal error: EBKAC (error between keybord and chair)

  10. #10
    me123 ist offline Grünschnabel
    registriert
    02-10-2012
    Beiträge
    2

    AW: getElementById dateiübergreifend?

    Hi,

    danke für die Stichworte und Code-Beispiele. Habe es mit dem DOM-Parser hinbekommen und es funktioniert (bisher) einwandfrei.

    Gruß
    me123

Ähnliche Themen

  1. GetElementById
    Von TTTT im Forum JavaScript
    Antworten: 9
    Letzter Beitrag: 16-08-2007, 14:20
  2. div & getElementById()
    Von Testor im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 22-05-2007, 19:30
  3. getElementById
    Von chrisnrw im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 23-07-2006, 20:29
  4. getElementById
    Von gingerswelt im Forum JavaScript
    Antworten: 0
    Letzter Beitrag: 05-02-2006, 19:26
  5. getElementById
    Von qor im Forum JavaScript
    Antworten: 2
    Letzter Beitrag: 14-11-2003, 17:44

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •