jr63: Übergeordnetes Objekt bestimmen

Hallo zusammen,

leider habe ich hierzu noch nichts gefunden, was passt. Vielleicht kann mir hier jemand helfen.

Kurzversion: Ich brauche etwas in er Art obj.parent

Langversion: Eine Funktion bekommt als Paramter ein Objekt (in dem Fall ein Eingabelement von beliebigem Typ) und soll den Wert zurückliefern. Also z.B. so:

function wert(obj) { return obj.value; }

Das obj wurde z.B. mit document.getElementById() bestimmt.
Jetzt soll auf ein anderes Objekt im gleichen Fenster zugegriffe werden, also noch ein document.getElementById().

Aber das ganze soll dynamisch sein. document ist also nicht immer richtig, es könnte auch opener.document sein. Ich bräuchte also etwas in der Form obj.parent.getElementByI(). Aber "parent" gibt es nicht.

Kann man das irgend wie bewerksteligen? Gibt es Alternativen?

Ich hoffe, dass ich mich einigermaßen verständlich machen konnte. Vielleicht ist das ja auch ganz einfach und ich sehe nur den Wald vor lauter Bäumen nicht.

Wäre nett, wenn mir jemand helfen könnte.

Viele Grüße,

Joachim

  1. Hi,

    Aber "parent" gibt es nicht.

    Doch, verweist aber auf einen Eltern-Frame.
    Vieleicht hilft Dir parentNode, damit bekommst Du das Elternelement Deines aktuellen Elementes.

    Ich hoffe, dass ich mich einigermaßen verständlich machen konnte.

    nun ja...

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. Hallo,

      danke für die schnelle Antwort, aber das scheint es leider nicht zu sein. Sowohl parentNode als auch parentElement habe ich schon ausprobiert und bei beiden kommt die Fehlermeldung "Das Objekt unterstützt diese Eigenschaft oder Methode nicht".

      Ein einfacher Test mit zwei Objekten:

      obj = document.getElementById("ID1");
      p   = obj.parentNode.getElementsByName("NAME2");
      alert(p.length);

      Viele Grüße,

      Joachim

      1. Hi,

        "Das Objekt unterstützt diese Eigenschaft oder Methode nicht".

        Du machst etwas falsch. Teste:

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
        <html>
        <head>
        <script type="text/javascript">
            function getobj(obj) {
                alert(obj.parentNode);
                alert(obj.parentNode.getElementsByTagName("p").length)
            }
        </script>
        </head>
        <body onload="getobj(document.getElementById('foo'))">
            <div id="main">
                <p id="foo">lala</p>
                <p id="bar">lulu</p>
            </div>
        </body>
        </html>

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
        1. Hallo Joachim,

          Danke für die ausführliche Antwort. Es ist tatsächlich so, dass getElementsByTagName funktioniert, aber mit getElementsByName gibt es den beschriebenen Fehler. Ich habe Dein Beispiel hierfür minimal geändert. Vermutlich mache ich einen Denkfehler, aber der Zugriff auf obj.parentNode.getEleentsByName gibt immer einen Fehler.

          Hier also noch einmal das Beispiel (unabhängig davon, ob getElementById besonders schön ist, oder nicht, wie Cheatah schreibt).

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
          "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
          <html>
          <head>
          </head>
          <body>
              <div id="main">
                  <input id='feld1' type='text' value='Irgendetwas'>
                  <input name='feld2[]' type='checkbox' value='1'>Eins<br>
                  <input name='feld2[]' type='checkbox' value='2'>Zwei<br>
                  <input name='feld2[]' type='checkbox' value='3'>Drei<br>
              </div>
          </body>

          <script type="text/javascript">
              function getobj(obj) {
                  alert(obj.parentNode);
                  alert(obj.value);
                  alert(obj.parentNode.getElementsByName("foo").length)
              }

          getobj(document.getElementById("feld1"));
          </script>
          </html>

          Also wo liegt mein Denkfehler???

          Viele Grüße,

          Joachim

          1. Korrektur: Muss natürlich ...getElementsByName("feld2").length heißen...

            Sorry

            1. Korrektur: Muss natürlich ...getElementsByName("feld2").length heißen...

              Es gibt in deinem Formular kein Element mit dem Namen.

              Struppi.

              1. Hallo Struppi,

                doch, aber das ist nicht das Problem. parentNode liefert kein Dokument zurück, und das brauche ich.

                Viele Grüße,

                Joachim

                1. Hi,

                  doch

                  nein, der Name lautet "feld2[]".
                                              ^^
                  Und da es sich hier um gleiche Namen handelt, die dann lediglich im empfangenden Script ein Array bilden, wirst Du beim JS-Zugriff über das Name-Attribut immer ein Probleme haben.

                  Abgesehen davon liefert parentNode - wenn - ein Html-Element zurück.

                  Gruesse, Joachim

                  --
                  Am Ende wird alles gut.
                  1. Hallo Joachim,

                    ok, das Feld heißt "feld2[]". Spielt aber doch überhaupt keine Rolle. Der Fehler kommt, weil parentNode kein "document" liefert. Und meine Frage war, wie bekomme ich das übergeordnete Objekt?

                    Wenn ich innerhalb des DOM-Baumes ein Element habe, dann möchte ich innerhalb des Baumes zu einer darüberliegenden Ebene zurück.

                    Ich habe:
                    Ein Objekt "window -> document [-> form] -> element"

                    Ich möchte:
                    Ein Objekt "window -> document"

                    Viele Grüße,

                    Joachim

                    1. ok, das Feld heißt "feld2[]". Spielt aber doch überhaupt keine Rolle. Der Fehler kommt, weil parentNode kein "document" liefert. Und meine Frage war, wie bekomme ich das übergeordnete Objekt?

                      Es muss auch kein document liefern, auch Elemente haben diese Methode.

                      Wenn ich innerhalb des DOM-Baumes ein Element habe, dann möchte ich innerhalb des Baumes zu einer darüberliegenden Ebene zurück.

                      Das ist parentNode

                      Ich habe:
                      Ein Objekt "window -> document [-> form] -> element"

                      Ich möchte:
                      Ein Objekt "window -> document"

                      Nein, möchtest du nicht, da auch über das form mit getElementsByName (wobei ich die element Collection bevorzugen würde) an die Elemente kommst.

                      Joachim

                      heissen hier heute alle Joachim?
                      (ich verrate es ungern, aber ich auch)

                      Struppi.

                      1. Nein, möchtest du nicht, da auch über das form mit getElementsByName (wobei ich die element Collection bevorzugen würde) an die Elemente kommst.

                        doch, genau das möchte ich... ;-) Ich brauche das document-Objekt nicht nur für die Feld-Werte. Aber Deine Idee mit der element-Collection ist für die reine Feldabfrage wahrscheinlich effizienter.

                        Jetzt aber ....

                        Mit den gesammelten Postings habe ich jetzt auch die Lösung gefunden. Um das zu einem Objekt gehörende document zu finden, kann man einfach den Objektbaum hinaufsteigen, wie oben durch Joachim beschrieben. Das Problem war, dass man sich innerhalb der Objekthierarchie irgend wo befindet, ich aber auf die document-Ebene will. Aber wie finde ich das document? typeof ist immer "object" und unterscheidet nicht zwischen den einzelnen Objekten. Hier hilft das Universalattribut nodeName. Hier steht nämlich "#document", wenn es sich um ein Dokument handelt. Ich weiß nicht, ob das allgemeingültig is, aber sowohl im IE als auch im FF funktioniert es. Das Ganze sieht dann so aus:

                        // obj = Beliebiges Objekt innerhalb des Dokuments
                        while (obj.nodeName != "#document")
                            obj = obj.parentNode;
                        // obj ist jetzt document

                        Es ist also völlig egal, wo ich mich innerhalb der Hierarchie befinde, mit dieser einfachen Schleife komme ich immer zum document, auch wenn es das opener.document ist oder ich mich innerhalb einer form befinde.

                        Joachim

                        heissen hier heute alle Joachim?
                        (ich verrate es ungern, aber ich auch)

                        Hehe, war früher mal ein bliebter Name. Wahrscheinlih sind wir alle ähnliche Jahrgänge. Heutzutage ist der Name ja nur noch recht selten zu finden.

                        Danke an alle.

                        Viele Grüße,

                        Joachim

                        1. Hallo,

                          Ich weiß nicht, ob das allgemeingültig is, aber sowohl im IE als auch im FF funktioniert es. Das Ganze sieht dann so aus:

                          // obj = Beliebiges Objekt innerhalb des Dokuments
                          while (obj.nodeName != "#document")
                              obj = obj.parentNode;
                          // obj ist jetzt document

                          Es ist also völlig egal, wo ich mich innerhalb der Hierarchie befinde, mit dieser einfachen Schleife komme ich immer zum document

                          Wie jetzt? Ist das wirklich dein Ernst?
                          Wenn du das document brauchst, musst du doch nicht in der Hierarhie die Elemente abklappern. Das document heißt "document", und so wird es auch direkt angesprochen:

                          // obj = Beliebiges Objekt innerhalb des Dokuments  
                             obj = document;  
                          // obj ist jetzt document  
                          
                          

                          Gruß, Don P

                          1. Hallo,

                            Wie jetzt? Ist das wirklich dein Ernst?

                            Ja, das ist mein Ernst.

                            Wenn du das document brauchst, musst du doch nicht in der Hierarhie die Elemente abklappern. Das document heißt "document", und so wird es auch direkt angesprochen:

                            // obj = Beliebiges Objekt innerhalb des Dokuments

                            obj = document;
                            // obj ist jetzt document

                            
                            >   
                            > Gruß, Don P  
                            >   
                            
                            Nein, das ist nicht immer richtig.  
                              
                            Beipiel:  
                            a = document.getElementById("fritz");  
                            b = opener.document.getElementById("fritz");  
                              
                            Für a ist das gesuchte Objekt "document", nicht aber für b.  
                              
                              
                              
                            Viele Grüße,  
                              
                            Joachim
                            
                            1. Hallo,

                              Beipiel:
                              a = document.getElementById("fritz");
                              b = opener.document.getElementById("fritz");

                              Für a ist das gesuchte Objekt "document", nicht aber für b.

                              Ach sooo, ja... Dann schreib' einfach:

                              obj = obj.ownerDocument;

                              Die Eigenschaft ownerDocument liefert das zu einem Knoten gehörige document-Objekt. Das ist es wohl, was duch suchst, oder?

                              Gruß, Don P

                              1. Hallo,

                                Die Eigenschaft ownerDocument liefert das zu einem Knoten gehörige document-Objekt.

                                Der IE macht mal wieder eine Ausnahme, da heißt die Eigenschaft "document", also besser so:

                                var docObj = element.document || element.ownerDocument;

                                Gruß, Don P

                                1. Hi Don,

                                  soooo einfach - und dafür gefühlte 2 Mio. Posts... Wahrscheinlich hätte ich mich besser ausdrücken sollen  ;-).

                                  Vielen Dank, das ist genau das, was ich brauche. Tja, wenn mans weiß ist es einfach ;-))))

                                  Viele Grüße,

                                  Joachim

                                2. Der IE macht mal wieder eine Ausnahme, da heißt die Eigenschaft "document", also besser so:

                                  Nicht der IE7. Beim IE6 kann ich es jetzt nicht testen, würde aber meine Hand in die nähe des Feuers dafür halten, dass ich das auch schon gemacht habe.

                    2. Hi,

                      Wenn ich innerhalb des DOM-Baumes ein Element habe, dann möchte ich innerhalb des Baumes zu einer darüberliegenden Ebene zurück.

                      Wie kommst Du denn auf die Idee, document sei die nächst höhere Ebene im Dom? Verschiedene Elemente besitzen Methoden wie "document.getElementById", Du bestimmst so lediglich, das _ab_ der Ebene "document" gesucht wird.

                      Teste:

                      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                      "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
                      <html>
                      <head>
                      <script type="text/javascript">
                          function getobj(obj) {
                              do{
                                  alert(obj);
                              } while(obj = obj.parentNode);
                          }
                      </script>
                      </head>
                      <body onload="getobj(document.getElementById('foo'))">
                          <div id="main">
                              <p id="foo">lala</p>
                          </div>
                      </body>
                      </html>

                      Gruesse, Joachim

                      --
                      Am Ende wird alles gut.
                      1. Wenn ich innerhalb des DOM-Baumes ein Element habe, dann möchte ich innerhalb des Baumes zu einer darüberliegenden Ebene zurück.
                        Wie kommst Du denn auf die Idee, document sei die nächst höhere Ebene im Dom? Verschiedene Elemente besitzen Methoden wie "document.getElementById",

                        Kein gutes Beispiel, weil getElementById tatsächlich nur document besitzt und wie ich gerade seh auch die Funktion getElementsByName haben Elemente nicht [ink:http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-745549614] (also war auch mein Beispiel falsch)

                        Also wäre in dem Fall tatsächlich die Elementscollection der sinnvollste Weg.

                        In etwa so: el.form.elements['feld2[]'];

                        Struppi.

                        1. Hi,

                          Also wäre in dem Fall tatsächlich die Elementscollection der sinnvollste Weg.

                          irgendwie so inkonsequent das es fast schon ein bug ist. Bei getElementById lässt es sich ja nachvollziehen, aber nach Namen nur ab einem bestimmten Node zu suchen macht ja Sinn...

                          Dennoch ist document nicht die "nächsthöhere" Ebene, nur weil getElementById('foo') eine Methode von document ist.

                          el.form

                          geht das? Ich denke man muss erst zurück zu document, beispielsweise per loop oder el.ownerDocument.forms[0]...

                          Gruesse, Joachim

                          --
                          Am Ende wird alles gut.
          2. Bounjoun jr63,

            Also wo liegt mein Denkfehler???

            Dass Du die Fehlerkonsole des Firefox ignorierst?

            Fehler: obj.parentNode.getElementsByName is not a function
            Quelldatei: file:///C:/Users/Local/Desktop/test.html
            Zeile: 19

            Adiou.

            1. Hallo Jean-Max,

              die Fehlerkonsole des ID (es muss im IE laufen) gibt die oben beschriebene Fehlermeldung aus. Firebug den von Dir beschriebenen Fehler, was aber auf das gleiche raus kommt. Er mag die Funktion getElementsByName() nicht, weil mir parentNode von dem obj eben nicht das Dokument gibt, sondern etwas anderes.

              Also:

              obj = document.getElementById("...");
              obj.parentNode    // liefert nicht mehr document

              Meine Frage ist also leider immer noch nicht beantwortet. Wie bekomme ich aus obj wieder mein Dokument? Das Dokument könnte z. b. auch vom opener kommen.

              Viele Grüße,

              Joachim

      2. http://www.w3schools.com/Dom/prop_node_ownerdocument.asp

  2. Hi,

    Jetzt soll auf ein anderes Objekt im gleichen Fenster zugegriffe werden, also noch ein document.getElementById().

    document.getElementById() ist *eine* Methode, um Element-Objekte zu erlangen. *Nur* eine. Es gibt eine ganze Menge anderer, und nur sehr, sehr selten existiert eine Notwendigkeit dazu, document.getElementById() zu verwenden. Oftmals sind effizientere Wege möglich.

    Das Elternelement beispielsweise ist obj.parentNode. Es gibt keinen Grund, Umwege über irgendwelche IDs zu fahren. Nach meiner Schätzung sind ungefähr 80-90% aller im Netz zu findenden Verwendungen von document.getElementById() schlichtweg überflüssig und ineffizient.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo,

      danke für die Antwort. Ich möchte auf das übergeordnete Objekt zugreifen, getElementById() war da nur ein Beispiel. Und document.parentNode.getElementsByName() funktioniert einfach nicht, da beißt die Maus keinen Faden ab.

      Trotzdem würde mich interessieren, wie Du ohne getElementById() oder getElementsByName() z. B. auf ein Feld zugreifst? Das Feld als Eigenschaft des Dokuments oder der Form kann ja nur dann benutzt werden, wenn bereits zur Entwicklungszeit feststeht, wie das Feld heißt. Wie kann man in einer Funktion sonst auf ein beliebiges Eingabefeld zugreifen?

      Viele Grüße,

      Joachim

      1. Hallo jr63,

        Und document.parentNode.getElementsByName() funktioniert einfach nicht, da beißt die Maus keinen Faden ab.

        du suchst ja auch nach den Eltern von Adam und Eva.

        Gruß, Jürgen

      2. Hi,

        Und document.parentNode.getElementsByName() funktioniert einfach nicht,

        ich glaube, Du möchtest Dich allgemein - und zunächst absolut unabhängig von JavaScript - mit Objektorientierung beschäftigen. Weder das "document" noch das "getElementsByTagName()" sind an der Stelle auch nur im Mindesten sinnbehaftet.

        da beißt die Maus keinen Faden ab.

        Vielleicht hilft der schon in meinem ersten Posting genannte Beispielcode bei dieser Aufgabe.

        Trotzdem würde mich interessieren, wie Du ohne getElementById() oder getElementsByName() z. B. auf ein Feld zugreifst?

        Das kommt darauf an, was ich bereits habe und in welchem Kontext ich mich befinde. Handelt es sich beispielsweise um den onchange-Handler eines Eingabefeldes, genügt mir ein "this".

        Wie kann man in einer Funktion sonst auf ein beliebiges Eingabefeld zugreifen?

        Da es kein document.getElementByRandom() gibt, dürfte das tatsächlich schwierig sein, wenn auch nicht unlösbar. Vielleicht magst Du aber einfach das "beliebig" durch etwas ersetzen, das der tatsächlichen Aufgabe näher kommt.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. ich glaube, Du möchtest Dich allgemein - und zunächst absolut unabhängig von JavaScript - mit Objektorientierung beschäftigen. Weder das "document" noch das "getElementsByTagName()" sind an der Stelle auch nur im Mindesten sinnbehaftet.

          Was will uns der Autor damit sagen?
          "document" ist ein Objekt und "getElementsByTagName()" eine Methode, die selbst wieder Objekte liefert. Was soll da (oder soll nicht) sinnbehaftet sein? Nun ist JavaScript nicht gerade die Vorzeige-OO-Sprache. In C++, C#, PHP oder selbst in VB kann ich jederzeit den Typ eines Objekts bestimmen. Das scheint mir in JS nicht ganz so einfach zu sein, weil alles mehr oder weniger ein "object" ist. Ich hab das Problem jetz mit parentNode und nodeName gelöst, da mit typeof oder instanceof nur "object" kennen (siehe meine letzten Eintrag).

          Das kommt darauf an, was ich bereits habe und in welchem Kontext ich mich befinde. Handelt es sich beispielsweise um den onchange-Handler eines Eingabefeldes, genügt mir ein "this".

          Ich habe eben nichts außer dem Objekt, denn ich befinde mich in einer Funktion. Das Objekt kann druchaus per "this" übergeben worden sein, oder per getElementById oder von mir aus als Element-Collection-Eintrag, völlig egal. Und ich möchte einfach nur das zu diesem Objekt gehörende document, also in der Objekthierarchie nach oben.

          Für mich ist das Problem damit gelöst.

          Viele Grüße,

          Joachim

          1. Hi,

            Was will uns der Autor damit sagen?

            Dass wir [im speziellen: Du] nachdenken sollen/sollst.

            "document" ist ein Objekt und "getElementsByTagName()" eine Methode, die selbst wieder Objekte liefert.

            Gut.
            Und was ist deiner Meinung nach parentNode, was du noch zwischen die zwei gesetzt hast?
            Node bezieht sich auf Knoten im DOM-Sinne. Was für einen Vorfahrenknoten soll document denn deiner Meinung nach haben?

            Nun ist JavaScript nicht gerade die Vorzeige-OO-Sprache. In C++, C#, PHP oder selbst in VB kann ich jederzeit den Typ eines Objekts bestimmen. Das scheint mir in JS nicht ganz so einfach zu sein, weil alles mehr oder weniger ein "object" ist.

            Vielleicht ist dein OO auch kein Vorzeige-OO, wenn du häufiger nicht weißt, mit welcher Art von Objekt du es eigentlich gerade zu tun hast, so dass du explizit bei irgendwem nachfragen müsstest?

            Ich habe eben nichts außer dem Objekt, denn ich befinde mich in einer Funktion. Das Objekt kann druchaus per "this" übergeben worden sein, oder per getElementById oder von mir aus als Element-Collection-Eintrag, völlig egal.

            Ja, eben - völlig egal.
            Wenn du mit dem Objekt (Element) etwas bestimmtes machen möchtest - dann teste, ob das Objekt (Element) die notwendigen Eigenschaften oder Methoden unterstützt - und dann mach'.

            Und ich möchte einfach nur das zu diesem Objekt gehörende document, also in der Objekthierarchie nach oben.

            Wenn du wirklich öfters in die Verlegenheit kommen solltest, mit einem Objekt, das deiner Funktion/Methode übergeben wurde, so rein gar nichts anfangen zu können, so lange du dich nicht erst mal bis zum document, in dem es hängt, hochgehangelt hast - dann scheiterst du vermutlich gerade am Versuch der Schaffung einer eierlegenden WollmilchDOMsau, die alles auf einmal können, und dem Nutzer möglichst wenig Strukturierung seiner Programmiergedanken, was das drumherum angeht, abverlangen soll.
            Kurz und knackig, als Fazit: Du suchst vermutlich ein JavaScript-Framework. (Bevor du dir auf die harte Tour selber eins bastelst.)

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  3. faszinierend, wie sich manche leute echauffieren können. es wurde obj.document bzw. obj.ownerDocument gesucht, wie es unten don p. geschrieben hat, sonst nichts. irgend welche belehrungen über oo-programmierung oder die benutzung von bestimmten funktionen haben hier nichts zu suchen.

    1. faszinierend, wie sich manche leute echauffieren können. es wurde obj.document bzw. obj.ownerDocument gesucht, wie es unten don p. geschrieben hat, sonst nichts. irgend welche belehrungen über oo-programmierung oder die benutzung von bestimmten funktionen haben hier nichts zu suchen.

      Hast du absichtlich oder versehentlich unter dem selben Namen geantwortet?
      Um auch noch was zu deinem Beitrag zu bemerken, andersherum ist es auch wieder faszinierend, wie wenig manche Leute ihr Problem beschreiben können.

      1. Hallo,

        ist ja immer noch nicht fertig... ;-)

        Aber jetzt doch bitte den Ball flach halten. Ich hab doch meine Antwort bekommen.

        Um auch noch was zu deinem Beitrag zu bemerken, andersherum ist es auch wieder faszinierend, wie wenig manche Leute ihr Problem beschreiben können.

        Na, ich weiß nicht so recht. Das stand in meiner ursprünglichen Frage:

        Das obj wurde z.B. mit document.getElementById() bestimmt.
        Jetzt soll auf <b>ein anderes Objekt im gleichen Fenster zugegriffe werden</b>, also noch ein document.getElementById().

        Aber das ganze soll dynamisch sein. document ist also nicht immer richtig, es könnte auch opener.document sein. Ich bräuchte also etwas in der Form obj.parent.getElementByI(). Aber "parent" gibt es nicht.

        Ich fand das aussagekräftig genug ;-)

        Aber wie gesagt. Ich habe meine Antwort.

        Gruß an alle,

        Joachim

        1. Ich fand das aussagekräftig genug ;-)

          Keine Ahnung, wie es den anderen geht, aber ich lese mir den Text nicht so gründlich durch, sonder überfliege ihn nur. Wenn du dann dein Problem grosszügig umschreibst, wird da die eine oder andere Info schnell mal überlesen.

          Mir sticht hier "obj.parent.getElementByI()" ins Auge. Den Satz hätte ich gelesen und auch mit parentNode geantwortet.

          Dein Problem war aber nur/eigentlich:
          "Wie komme ich von einem beliebigen Element auf dessen document-Objekt?"

          Aber selbst nachdem ich mir alles genau durchgelesen habe, dein Problem wäre mir nicht sofort klar gewesen.

          Aber wie gesagt. Ich habe meine Antwort.

          Genau, lassen wir es also dabei bewenden.