Anker auswählenund Funktion zuweisen - Brett vorm Kopp
frankx
- javascript
Hellihello
window.onload = function () {
anchors=document.getElementsByTagName("a");
for (i=0; i<anchors.length; i++) {
alert ("anchors[i]: " + anchors[i] + "ende");
}
/* anchors[i].onMouseOver = function() {
alert("hallo");
linkHoverOn(this);
}
*/
}
bringt mir komischerweise die hrefs der Anker. wenn ich anchors[i].parentNode alerten lasse, kommt das ElternLI-Element ("objeckt HTMLLiElement". Warum bringt mir ein alert (anchors[i]) nicht "HtmlAnchorElement"? Logischerweise funktionniert dann auch die auskommentierte Funktion nicht.
Dank und Gruß,
Hi,
alert ("anchors[i]: " + anchors[i] + "ende");
bringt mir komischerweise die hrefs der Anker. [...] Warum bringt mir ein alert (anchors[i]) nicht "HtmlAnchorElement"?
erstens weil es in HTML kein <anchor>-Element gibt (und Du auch keine solchen gesucht hast, sondern <a>-Elemente), und zweitens weil HtmlAElement.prototype.toString() im JavaScript-Core des Browsers überschrieben wurde. Die String-Repräsentation des Objektes ändert aber nichts daran, wie das Objekt selbst funktioniert.
Logischerweise funktionniert dann auch die auskommentierte Funktion nicht.
Nein, das liegt schlicht und ergreifend daran, dass kein einziges HTML-Element-Objekt eine "onMouseOver" heißende Eigenschaft beachtet. Genau wie XHTML ist JavaScript case-sensitive. Versuche es also wie bei XHTML.
Cheatah
Hellihello Chetah,
erstens weil es in HTML kein <anchor>-Element gibt (und Du auch keine solchen gesucht hast, sondern <a>-Elemente)
das dachte ich auch, deshalb ja
anchors=document.getElementsByTagName("a");
damit wäre doch "anchors" eine Nodelist, die alle Knoten mit Tagname "a" enthält, oder?
, und zweitens weil HtmlAElement.prototype.toString() im JavaScript-Core des Browsers überschrieben wurde.
der Schuft der, gibt dann schlicht den Inhalt des href-Attributes aus?!
Die String-Repräsentation des Objektes ändert aber nichts daran, wie das Objekt selbst funktioniert.
Logischerweise funktionniert dann auch die auskommentierte Funktion nicht.
Nein, das liegt schlicht und ergreifend daran, dass kein einziges HTML-Element-Objekt eine "onMouseOver" heißende Eigenschaft beachtet. Genau wie XHTML ist JavaScript case-sensitive. Versuche es also wie bei XHTML.
Merci! Für die Mitleser: "anchors[i].onmouseover" muss es heißen, keine Kamelschrift.
Dank und Gruß,
Hi,
das dachte ich auch, deshalb ja
anchors=document.getElementsByTagName("a");
damit wäre doch "anchors" eine Nodelist, die alle Knoten mit Tagname "a" enthält, oder?
jawollja.
, und zweitens weil HtmlAElement.prototype.toString() im JavaScript-Core des Browsers überschrieben wurde.
der Schuft der, gibt dann schlicht den Inhalt des href-Attributes aus?!
Genau. Das wurde als sinnvoll erachtet. Genauer gesagt wurde für die meisten anderen Elemente nichts ähnlich Sinnvolles gefunden, deswegen haben diese ein Standard-toString().
Merci! Für die Mitleser: "anchors[i].onmouseover" muss es heißen, keine Kamelschrift.
Bingo :-)
Cheatah
Hallo,
bringt mir komischerweise die hrefs der Anker. ... Warum bringt mir ein alert (anchors[i]) nicht "HtmlAnchorElement"?
Das ist ein Relikt aus grauer Vorzeit, in Netscape JavaScript (»DOM 0«) definiert und nicht mit den Begriffen von DOM erklärbar. In dem alten Modell gabs keine »Knoten«.
Hyperlinks sind nach JavaScript 1.3 Link-Objekte und diese sind Location-Objekte. Für die gilt: »Omitting a property name from the location object is equivalent to specifying location.href.«
Logischerweise funktionniert dann auch die auskommentierte Funktion nicht.
Das ist wie gesagt falsch, du hast es da durchaus mit dem Elementknoten zu tun, aber wenn der in einen String umgewandelt wird, dann wird eben dessen href-Attribut ausgegeben. Übrigens ist nirgends definiert, was für ein String herauskommt, wenn du einen Elementknoten in einen String umwandelst.
Mathias