Karlchen: aktuelles DIV ansprechen in dem Javascript geschrieben steht?

Hallo,

ich habe eine (hoffentlich einfache) Frage, aber ich komm leider nicht dahinter.

Über getElementByXYZ kann ich ja wunderbar auf irgendwelche DIVs auf meiner Seite zugreifen. Aber nun habe ich ein DIV, welches keine ID oder Name hat.
In diesem DIV steht JavaScript und ich möchte gerne auf das DIV zugreifen. Ich hab's mit this und mit parent usw. versucht aber ich komm nicht dran ;-)
Hier mal zur Verdeutlichung:

<div id="1">
  <div>
    <script ...>
      alert(Hier möchte ich z. B. die Höhe des zweiten DIVs ausgeben);
    </script>
  </div>
</div>

Ich hab auch bereits versucht über das obere DIV zu gehen und dann quasi das Kind von DIV1 anzusprechen und im IE funktioniert's wunderbar, aber im Firefox ist das namenlose DIV erst das zweite Kind (warum auch immer?!?)

Gruß
Karlchen

  1. Hi,

    Über getElementByXYZ kann ich ja wunderbar auf irgendwelche DIVs auf meiner Seite zugreifen. Aber nun habe ich ein DIV, welches keine ID oder Name hat.

    div hat niemals einen Namen.

    In diesem DIV steht JavaScript und ich möchte gerne auf das DIV zugreifen. Ich hab's mit this und mit parent usw. versucht aber ich komm nicht dran ;-)

    Soweit mir bekannt ist, weiß das Javascript zur Ausführungszeit nicht, wo es eingebunden ist.

    Hier mal zur Verdeutlichung:
    <div id="1">

    ungültige id, da Ziffer am Anfang.

    <div>
        <script ...>
          alert(Hier möchte ich z. B. die Höhe des zweiten DIVs ausgeben);
        </script>
      </div>
    </div>

    Ich hab auch bereits versucht über das obere DIV zu gehen und dann quasi das Kind von DIV1 anzusprechen und im IE funktioniert's wunderbar, aber im Firefox ist das namenlose DIV erst das zweite Kind (warum auch immer?!?)

    Keine Ahnung, warum das im IE so seltsam gelöst ist, daß der Textknoten zwischen den beiden Tags einfach unterschlagen wird.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Hi,

      Über getElementByXYZ kann ich ja wunderbar auf irgendwelche DIVs auf meiner Seite zugreifen. Aber nun habe ich ein DIV, welches keine ID oder Name hat.

      div hat niemals einen Namen.

      Danke für den Hinweis, aber ich denke, dass Ihr wisst was gemeint ist, oder? ;-)

      In diesem DIV steht JavaScript und ich möchte gerne auf das DIV zugreifen. Ich hab's mit this und mit parent usw. versucht aber ich komm nicht dran ;-)

      Soweit mir bekannt ist, weiß das Javascript zur Ausführungszeit nicht, wo es eingebunden ist.

      Hier mal zur Verdeutlichung:
      <div id="1">

      ungültige id, da Ziffer am Anfang.

      Das ist auch nicht die tatsächliche ID, sondern nur zur Verdeutlichung, dass es sich um das erste DIV handelt -> werd ich das nächste Mal anders schreiben.

      <div>
          <script ...>
            alert(Hier möchte ich z. B. die Höhe des zweiten DIVs ausgeben);
          </script>
        </div>
      </div>

      Ich hab auch bereits versucht über das obere DIV zu gehen und dann quasi das Kind von DIV1 anzusprechen und im IE funktioniert's wunderbar, aber im Firefox ist das namenlose DIV erst das zweite Kind (warum auch immer?!?)

      Keine Ahnung, warum das im IE so seltsam gelöst ist, daß der Textknoten zwischen den beiden Tags einfach unterschlagen wird.

      cu,
      Andreas

      Ja, dann mal besten Dank für die Korrektur, auch wenn's mein Problem nicht löst ;-)

      Gruß,
      Karlchen

  2. Hallo,

    Über getElementByXYZ kann ich ja wunderbar auf irgendwelche DIVs auf meiner Seite zugreifen. Aber nun habe ich ein DIV, welches keine ID oder Name hat.
    In diesem DIV steht JavaScript und ich möchte gerne auf das DIV zugreifen. Ich hab's mit this und mit parent usw. versucht aber ich komm nicht dran ;-)

    document.getElementById('1').getElementsByTagName('div')[0]
    funkltioniert natürlich nur, wenn es immer das erste div ist. Ansonsten ist die elegantere Lösung natürlich diesem div eine ID zu verpassen.

    vg ichbinich

    --
    Kleiner Tipp:
    Tofu schmeckt am besten, wenn man es kurz vor dem Servieren durch ein saftiges Steak ersetzt...
  3. [latex]Mae  govannen![/latex]

    Hallo,

    ich habe eine (hoffentlich einfache) Frage, aber ich komm leider nicht dahinter.

    Ich hab auch eine: Für welche Browser?

    Für aktuelle Browser sowie den IE8 im IE8-Modus(!) gibt es eine weitere Möglichkeit:

    <div id="div_aussen">  
       <div id="div_innen"> <!-- diese id ist nur zur Kontrolle eingefügt -->  
         <script type="text/javascript">  
           var a = document.querySelector('#div_aussen div');  
           alert(a.id);  // Anzeige: div_innen also haben wir das Element  
         </script>  
      </div>  
    </div>
    

    Gibt es mehrere divs und man will nicht das Erste, benutzt man document.querySelectorAll und spricht das gewünschte Element über den Index an.

    Dann gibts auch noch document.evaluate und die Möglichkeit, per XPATH zu selektieren...

    Cü,

    Kai

    --
    Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
    in Richtung "Mess up the Web".(suit)
    Foren-Stylesheet
    1. Naja Kai,
      wenn das äußere DIV einen Namen hat bzw. irgendwie ansprechbar ist, dann er ja auch normale DOM-Methoden (childNodes[1]; getElementsByTagName) anwenden.

      Es ging ja darum, dass das JS wissen müsste wo es steht und das weiß es in der Regel eben nicht.

      Wenn du dem script-Element eine ID (oder sonst was was man ansprechen kann) verpasst, dann kannst du auch auf dessen Eltern zugreifen, wenn das eine Option für dich ist. (Laut selfHTML hat das script-Element kein ID-Attribut, aber ich habe das schonmal benutzt und es funktionierte. Ich bin gerade zu fault um zu prüfen ob dem wirklich so ist.)

      Ansonsten hätte ich noch zwei etwas abenteuerliche Ideen, von denen ich auch nicht weiß ob sie funktionieren:
      Erste Idee: Erschaffe mit .write() ein neues Element, welches du anschließend über DOM-Methoden greifen kannst, von dort aus auf das Elternelement zugreifst und anschließend ggf. das geschriebene wieder löscht. Kann auch sein, dass man da mit time-outs arbeiten muss, damit das Script-Element einmal "abgelaufen" ist (und das neue Element geschrieben) bevor du auf das Elternelement zugreifst.
      Aber ich vermute mal dass sowas hier funktionier:

      <element onclick="foobar();" />  
      <div>  
       Blindtext  
       <script>  
        document.write('<span id="baz"></span>');  
        function foobar () {  
         document.getElementById('baz').parentNode.style.backgroundColor="#ACE";  
        }  
       <script>  
      </div>
      

      Zweite Abenteuerliche Idee: Finde das Script-Element anhand seines Inhaltes.
      Schreib "MagicNumbers" in das Script-Element, mit dem du es identifizieren kannst. Dann durchsuche alle document.getElementsByTagName("script")[].firstChild.data.match(/magic4/) nach der entsprechenden Zahl.
      Auch da weiß ich nicht ob's funktioniert. Es ist wie gesagt eine abenteuerliche Idee :)

      --
      sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
  4. In diesem DIV steht JavaScript und ich möchte gerne auf das DIV zugreifen.

    Ein Script hat Zugriff auf das DOM, welches vor dem script-Element liegt. Siehe Ausführung von script-Elementen. In dem Moment, wo es ausgeführt wird, ist das script-Element bereits im DOM. Danach kommt nichts mehr im DOM, weil die JavaScript-Ausführung den HTML-Parser blockt (Hintergrundinfos).

    Ergo: Ein Script weiß genau, wo es im DOM liegt. Man kann sich alle Elemente im DOM holen bzw. in deinem Fall reichen alle div-Elemente. Es ist garantiert, dass das letzte Element im Dokument das script-Element ist, dessen Code gerade ausgeführt wird. Das VORletzte Element im DOM ist also dessen vorheriges Geschwisterelement (sofern vorhanden) oder dessen Elternelement.

    <div id="foo">  
       <div id="bar">  
          <script>  
    [code lang=javascript]         (function () {  
                var all = document.getElementsByTagName("*");  
                var div = all[all.length - 2];  
                alert(div + ' ' + div.id);  
             })();
    

    </script>
       </div>
    </div>[/code]

    oder halt

    <div id="foo">  
       <div id="bar">  
          <script>  
    [code lang=javascript]         (function () {  
                var divs = document.getElementsByTagName("div");  
                var div = divs[divs.length - 1];  
                alert(div + ' ' + div.id);  
             })();
    

    </script>
       </div>
    </div>[/code]

    Für empfehlenswert, weil sicherer und sprechender, halte ich allerdings den von ichbinich aufgezeigten Weg.

    Mathias