Harry Potter: Links einer Seite mit Javascript auslesen

Hallo,
ich versuche gerade, alle Links der aktuellen Seite mit Javascript auszulesen. Hier ist der Code meiner Funktion dafür:

function tooltip()
{
    var links = document.links;

    console.log(links);
}
document.addEventListener("DOMContentLoaded", tooltip());

Allerdings tritt dabei folgendes Problem auf (siehe Screenshots Konsole):

Ich kriege eine HTMLCollection mit der Länge "0" zurück...


...in Wirklichkeit aber gibt es 13 Links, die auch alle in der HTMLCollection stehen. Nun will ich später mit einer Schleife auf die HTMLCollection zugreifen, was ich aber nicht kann, weil ich die Anzahl der Elemente nicht bestimmen kann.
Woran könnte das liegen?
Viel Grüße, Samuel

  1. Hallo,

    Ich kriege eine HTMLCollection mit der Länge "0" zurück...

    Wo kommt denn die HTMLCollection her? Im Wiki finde ich dort nichts.

    Gruß
    Kalk

    1. Hallo,

      Ich kriege eine HTMLCollection mit der Länge "0" zurück...

      Wo kommt denn die HTMLCollection her?

      Nun, wenn ich mir document.links in der Konsole ausgeben lasse, kriege ich eine HTMLCollection.
      Grüße,
      Samuel

  2. Hallo Harry Samuel Potter, 😉

    document.addEventListener("DOMContentLoaded", tooltip());
    

    so wird das nichts. So registrierst du nicht die Funktion als Eventhandler, sondern du rufst sie sofort auf und versuchst dann, das Funktionsergebnis als Eventhandler zu registrieren. Da deine Funktion nichts zurückgibt, ist das null.

    Deine Funktion hat also das Problem vieler Männer: Sie kommt viel zu früh.
    Nämlich lange bevor das DOM überhaupt fertig aufgebaut ist.

    Live long and pros healthy,
     Martin

    --
    Lasst uns ins Horn brechen und aufstoßen.
    1. Hallo Martin,
      erstmal vielen Dank!
      Ich glaube, da wäre ich selbst nicht draufgekommen. 😊
      Richtig wäre addEventListener("DOMContentLoaded", tooltip);, oder?
      Tut mir leid, dass ich euch mit einem solchen Fehler belästige, aber ich bin halt noch am Lernen.😀
      Viele Grüße, Samuel

      1. Hallo,

        Ich glaube, da wäre ich selbst nicht draufgekommen. 😊

        naja, oft steckt der Teufel wirklich im Detail.

        Richtig wäre addEventListener("DOMContentLoaded", tooltip);, oder?

        Ja. Ein Funktionsname ohne jede Zierde notiert meint die Funktion selbst, bzw. das Objekt, das intern die Funktion repräsentiert. Ein Funktionsname gefolgt von runden Klammern ist dagegen ein Aufruf der Funktion, um an dieser Stelle mit ihrem Rückgabewert weiterzurechnen.

        Tut mir leid, dass ich euch mit einem solchen Fehler belästige, aber ich bin halt noch am Lernen.😀

        Völlig okay. Auffällig (und ärgerlich) wäre nur, wenn du über längere Zeit immer wieder denselben Fehler machen und immer wieder in etwa dieselbe Frage stellen würdest.

        Live long and pros healthy,
         Martin

        --
        Lasst uns ins Horn brechen und aufstoßen.
        1. Hallo Martin,

          gut gesehen. Darauf muss man erstmal achten...

          Die Gemeinheit ist, dass es nicht zwingend falsch sein muss, an der Stelle Klammern zu setzen. Es könnte durchaus sein, dass die tooltip-Funktion eine Funktion zurückgibt, die dann als DOMContentLoaded Handler aufgerufen wird und die Arbeit macht. Aber ok, das ist schon eher was für fortgeschrittene Verwirrtechniker.

          Rolf

          --
          sumpsi - posui - obstruxi
          1. Hallo Rolf,

            gut gesehen. Darauf muss man erstmal achten...

            ich bin mit Assembler und C groß geworden. Besonders die teils etwas knifflige Syntax von C hat mich gelehrt, sehr genau hinzusehen.

            Die Gemeinheit ist, dass es nicht zwingend falsch sein muss, an der Stelle Klammern zu setzen.

            Deswegen wirft das ja auch keinen Syntaxfehler. In einer Sprache, die auf Typen Wert legt, wäre es hier wenigstens noch ein Type Mismatch oder sowas.

            Es könnte durchaus sein, dass die tooltip-Funktion eine Funktion zurückgibt, die dann als DOMContentLoaded Handler aufgerufen wird und die Arbeit macht. Aber ok, das ist schon eher was für fortgeschrittene Verwirrtechniker.

            Ja. Zumal die tooltip-Funktion direkt darüber stand.

            Live long and pros healthy,
             Martin

            --
            Lasst uns ins Horn brechen und aufstoßen.
            1. Hallo,

              Die Gemeinheit ist, dass es nicht zwingend falsch sein muss, an der Stelle Klammern zu setzen.

              Deswegen wirft das ja auch keinen Syntaxfehler. In einer Sprache, die auf Typen Wert legt, wäre es hier wenigstens noch ein Type Mismatch oder sowas.

              oder auch wieder nicht. Auch in C ist ja der NULL-Pointer zuweisungskompatibel zu allen anderen Zeigertypen.

              Live long and pros healthy,
               Martin

              Live long and pros healthy,
               Martin

              --
              Lasst uns ins Horn brechen und aufstoßen.
              1. Hallo Martin,

                schon. Aber vom Inhalt her wäre die tooltip-Funktion wohl vom Typ void gewesen und nicht vom Typ bool *(EventHandler) (oder wie auch immer man das in C++ korrekt verklausuliert).

                Rolf

                --
                sumpsi - posui - obstruxi
                1. Hi,

                  Aber vom Inhalt her wäre die tooltip-Funktion wohl vom Typ void gewesen und nicht vom Typ bool *(EventHandler) (oder wie auch immer man das in C++ korrekt verklausuliert).

                  mal überlegen ... Wenn das C wäre, dann würde AddEventListener als Parameter einen Zeiger auf eine Funktion erwarten, die ein Boolean als Ergebnis liefert. Bekommt aber void (das ist das Ergebnis einer Funktion, die eigentlich kein Ergebnis liefert). Gut, das könnte der Compiler erkennen.

                  Würde tooltop() allerdings einen void* (also einen Zeiger auf einen nicht näher definierten Datentyp) liefern, wäre der Compiler wieder glücklich. Denn der typenlose Zeiger void* ist auch wieder zuweisungskompatibel zu allen anderen Zeigertypen.

                  Ja, C bietet schon einige Möglichkeiten, sich ins Knie zu schießen. Trotzdem liebe ich die Sprache. Aber bleib mir bloß weg mit den zwei Pluszeichen nach dem C. Das hat der Teufel gesehen!

                  Live long and pros healthy,
                   Martin

                  --
                  Lasst uns ins Horn brechen und aufstoßen.
                  1. Hallo Martin,

                    Ja, C bietet schon einige Möglichkeiten, sich ins Knie zu schießen.

                    Nein, sowas tut man mit C nicht. Man schießt sich in den Fuß!

                    http://www.netzmafia.de/service/sprachen.html
                    http://gis.ess.washington.edu/grg/oldpeople/shootfoot.html

                    Rolf

                    --
                    sumpsi - posui - obstruxi