ich: Zugriff auf Bilder mit Mozilla

Hallo,
ich habe eine Frage zu Javascript:

Ich habe ein <div id="unten"> mit Style Sheets positioniert. Es enthält ein Bild <img id="y1">. Dieses Bild möchte ich mittels Javascript austauschen.

Im IE6 verwende ich dazu:
document.getElementById('unten').document.images.y1.src = xxx.src;

Netscape 4:
document.layers['unten'].document.images.y1.src = xxx.src;

Nur, wie sag' ich's meinem Mozilla bzw. Netscape 6/7?

Vielen Dank für Hinweise.

  1. Hallo,
    ich habe eine Frage zu Javascript:

    Ich habe ein <div id="unten"> mit Style Sheets positioniert. Es enthält ein Bild <img id="y1">. Dieses Bild möchte ich mittels Javascript austauschen.

    Im IE6 verwende ich dazu:
    document.getElementById('unten').document.images.y1.src = xxx.src;

    echt das klappt im IE? das ist die Netscape 4.x Variante.

    Aber warum machst du's nicht so: document.getElementById('y1').src = xxx.src;

    1. Im IE6 verwende ich dazu:
      document.getElementById('unten').document.images.y1.src = xxx.src;

      echt das klappt im IE? das ist die Netscape 4.x Variante.

      Das kann gar nicht im Netscape 4 gehen, weil
      getElementById erst ab Netscape 6 bzw. Mozilla unterstützt wird.

      Aber warum machst du's nicht so: document.getElementById('y1').src = xxx.src;

      Habe ich probiert. Aber dann sagt er mir document.getElementById('y1') has no properties.

      1. Im IE6 verwende ich dazu:
        document.getElementById('unten').document.images.y1.src = xxx.src;

        echt das klappt im IE? das ist die Netscape 4.x Variante.
        Das kann gar nicht im Netscape 4 gehen, weil
        getElementById erst ab Netscape 6 bzw. Mozilla unterstützt wird.

        OK, richtig.
        Ich meinte aber das ein Layer ein document ist. Ich hab ich noch nie gehört, dass das der IE auch so sieht.

        Aber warum machst du's nicht so: document.getElementById('y1').src = xxx.src;
        Habe ich probiert. Aber dann sagt er mir document.getElementById('y1') has no properties.

        Tja, dann ist irgendwo was falsch. Ich hab grad keinen MZ da, aber von meinem Verständniss müßte das klappen:

        <div id="xxx"><img id="y1" src="test.gif"></DIV>

        <script>
        var obj = document.getElementById('y1');

        alert(obj.src);
        </script>

        Wenn nicht, dann muss ich mich noch ein wenig mehr mit dem DOM beschäftigen.

        Struppi.

        1. Tja, dann ist irgendwo was falsch. Ich hab grad keinen MZ da, aber von meinem Verständniss müßte das klappen:

          <div id="xxx"><img id="y1" src="test.gif"></DIV>

          <script>
          var obj = document.getElementById('y1');

          alert(obj.src);
          </script>

          Das liefert "obj has no properties".

          1. Tja, dann ist irgendwo was falsch. Ich hab grad keinen MZ da, aber von meinem Verständniss müßte das klappen:

            <div id="xxx"><img id="y1" src="test.gif"></DIV>

            <script>
            var obj = document.getElementById('y1');

            alert(obj.src);
            </script>

            Das liefert "obj has no properties".

            Tja, dann lieg ich wohl falsch.

            Struppi.

          2. Tja, dann ist irgendwo was falsch. Ich hab grad keinen MZ da, aber von meinem Verständniss müßte das klappen:

            <div id="xxx"><img id="y1" src="test.gif"></DIV>

            <script>
            var obj = document.getElementById('y1');

            alert(obj.src);
            </script>

            Das liefert "obj has no properties".

  2. Hallo Du,

    Im IE6 verwende ich dazu:
    document.getElementById('unten').document.images.y1.src = xxx.src;

    Wieso so umständlich?

    document.getElementById('y1').src

    sollte doch auch wunderbar funktionieren, ohne irgendwelche Umwege über
    Dein div. Sowohl im IE also auch im Mozilla.

    • Tim
    --
    Ich weiß nie, was für eine Signatur ich nehmen sollte.
  3. Hi!

    Im IE6 verwende ich dazu:
    document.getElementById('unten').document.images.y1.src = xxx.src;

    Scheissbrowser. Das der so einen Quatsch interpretiert. IE ab 5 und Mozilla/NS6 schlucken vorbehaltlos document.getElementById('y1').src
    Alternativ geht auch document.images['y1'].src oder, die Methode die überall (auch in NN4) funktioniert: document.images[bildnummer].src

    Wenn nix von diesen dreien funtioniert, wird das dokument entweder als XML ausgeliefert (was ich nicht glaube) oder du solltest für einen gültigen Quelltext sorgen: http://validator.w3.org

    Gruß Herbalizer

    1. Hallo, Herbalizer,

      document.getElementById('unten').document.images.y1.src = xxx.src;
      IE ab 5 und Mozilla/NS6 schlucken vorbehaltlos document.getElementById('y1').src
      Alternativ geht auch document.images['y1'].src oder, die Methode die überall (auch in NN4) funktioniert: document.images[bildnummer].src

      Wenn nix von diesen dreien funtioniert,

      Wieso sollte es denn nicht? Ich dachte, wenn das Dokument als XHTML ausgeliefert wird, ist beispielsweise document.body nicht verfügbar (was eigentlich ebenfalls nicht?), aber wieso sollte document.images in diesem Fall (von dem du möglicherweise nicht redest, siehe unten) nicht vorhanden sein?

      wird das dokument entweder als XML ausgeliefert (was ich nicht glaube)

      Meintest du XHTML (application/xhtml+xml)? Bei XML (text/xml oder application/xml) ist es vielleicht verständlich, aber wieso sollte kein DOM-Zugriff über JavaScript möglich sein - ist window.document schon (X)HTML-spezifisch?

      Grüße,
      Mathias

      --
      »(...) hier ist ja alles voll Gelegenheiten. Nur gibt es freilich Gelegenheiten, die gewissermaßen zu groß sind, um benützt zu werden; es gibt Dinge, die an nichts anderem als an sich selbst scheitern. Ja, das ist staunenswert.«
      http://www.kafka.org/projekt/schloss/erst.html
      1. Hi!

        Wieso sollte es denn nicht? Ich dachte, wenn das Dokument als XHTML ausgeliefert wird, ist beispielsweise document.body nicht verfügbar (was eigentlich ebenfalls nicht?), aber wieso sollte document.images in diesem Fall (von dem du möglicherweise nicht redest, siehe unten) nicht vorhanden sein?

        Wenn eine Seite als XHTML (application/xhtml+xm) ausgeliefert wird, sollte alles was in DOM-Level2-HTML definiert wurde, angewendet werden können, genauso, als ob das Dokument als HTML (text/html) ausgeliefert werden würde. (Siehe Links in gleich folgendem Link)

        Allerdings hat Mozilla so seine Probleme damit http://bugzilla.mozilla.org/show_bug.cgi?id=111514#c58

        Meintest du XHTML (application/xhtml+xml)? Bei XML (text/xml oder application/xml) ist es vielleicht verständlich, aber wieso sollte kein DOM-Zugriff über JavaScript möglich sein - ist window.document schon (X)HTML-spezifisch?

        Ich meinte XML. Denn da kommt kein DOM-Level2-HTML zur Anwendung, und somit gibt es weder die ein HTMLImageObject, und somit auch keine Property namens src, noch eine Collection.
        Wöllte man hier auf das src-Attribut zugreifen so müsste dies mit document.getElementById('y1').getAttribute('src') geschehen. Geändert wird der Wert mittels document.getElementById('y1').setAttribute('src','bla.png'). Es kann notwendig sein, den XMLNamespace mit anzugeben, damit kenntlich gemacht wird, zu welchem XMLNamensraum das Element gehört:
        document.getElementById('y1').getAttributeNS('http://www.w3.org/1999/xhtml','src')
        document.getElementById('y1').setAttributeNS('http://www.w3.org/1999/xhtml','src','bla.png')

        Siehe auch Attatchments zu http://bugzilla.mozilla.org/show_bug.cgi?id=155233 und vgl. dazu http://rcswww.urz.tu-dresden.de/~rs324721/test.xml http://rcswww.urz.tu-dresden.de/~rs324721/test.xhtml http://rcswww.urz.tu-dresden.de/~rs324721/test.html bei denen es um das Erzeugen eines Images geht.

        Gruß Herbalizer