Links einer Seite mit Javascript auslesen

- javascript
0 Tabellenkalk
0 Der Martin
0 Harry Potter
0 Der Martin
0 Rolf B
0 Der Martin
0 Der Martin
0 Rolf B
0 Der Martin
0 Rolf B
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
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
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
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
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
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
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
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
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
proshealthy,
Martin
Live long and pros healthy,
Martin
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
Hi,
Aber vom Inhalt her wäre die tooltip-Funktion wohl vom Typ
void
gewesen und nicht vom Typbool *(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
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