Automatisch definierte Arrays (document.links[] etc.)
Jascha U.
- javascript
Hi,
ich habe ein Problem mit Arrays. Eigentlich sollte es ja in JavaScript möglich sein, alle Elemente der vordefinierten Arrays, die dann ja jeweils ein HTML-Objekt repräsentieren, nicht nur über ihre Indexnummer anzusprechen, sondern auch über ihren Namen bzw. ihre Id.
Das klappt mit dem document.images[]-Array und fast allen anderen auch ohne Probleme, nur im Internet Explorer (bei mir 5.5) und Netscape Navigator (4.5) funktioniert das nicht mit dem document.links[]-Array nicht... Wenn ich einen Link mit dem Namen, meinetwegen "sonstwas" habe, ist es im IE und NN nicht möglich den z.B per document.links["sonstwas"].onmouseover anzusprechen. Im Opera und Mozilla funktioniert das ohne Probleme. Weiß jemand ob es dafür eine Lösung gibt????
Hi
Also document.links ist kein Array sondern ein eigenes Objekt
eben das links Objekt mit den in <file:/Selfhml/tecbbg.htm>
beschriebenen Eigenschaften. Diesem Missverständnis bin ich bereits
selbst erlegen. Seltsamerweise kann man aber (zumindest unter NN)
document.links mittels concat in ein Array umkopieren.
ob du dann die Links mittels name ansprechen kannst bleibt abzuwarten, in
Selfhtml ist sowas nicht dokumentiert,
2. document.images["sonstwas"].onmouseover soll funktionieren ???
Kannste mir bitte zeigen wo das dokumentiert ist?
Viele Grüße
Rolf
Hi Rolf!
Also document.links ist kein Array sondern ein eigenes Objekt
eben das links Objekt mit den in <file:/Selfhml/tecbbg.htm>
beschriebenen Eigenschaften. Diesem Missverständnis bin ich bereits
selbst erlegen. Seltsamerweise kann man aber (zumindest unter NN)
document.links mittels concat in ein Array umkopieren.
Objekte und Arrays sind in JS technisch dasselbe. (Suche im Archiv nach "Kontinuum".) Philosphisch ist da aber natuerlich trotzdem ein gewisser Unterschied. Im speziellen ist document.links ein Array, welches Objekt vom Typ Link enthaelt (und Area, falls Du Image maps verwendest).
http://developer.netscape.com/docs/manuals/js/client/jsref/document.htm#1193918
- document.images["sonstwas"].onmouseover soll funktionieren ???
Kannste mir bitte zeigen wo das dokumentiert ist?
Das geht in Netscape nicht, aber Jascha schrieb ja document.links["sonstwas"].onmouseover, nicht document.images["sonstwas"].onmouseover, und fuer Links wird der OnMouseOver-Handler ja auch in Netscape interpretiert.
Fuer Jascha: Auf http://developer.netscape.com/docs/manuals/js/client/jsref/stmt.htm#1004815 findest Du, wie man alle Eigenschaften eines Objekts (gleichbedeutend mit alle Eintraege in einem Array) anzeigt. Wenn dort fuer document.links in den entsprechenden Browsern nicht die Namen der Links angezeigt werden, dann hast Du wohl Pech gehabt. Wenn mich mir http://developer.netscape.com/docs/manuals/js/client/jsref/link.htm so anschaue, haette ich zumindest fuer Netscape 4 wirklich nicht viel Hoffnung, da im Link-Objekt noch nicht mal eine name-Property vorhanden ist.
So long
Hi Calocybe
Grübel das in JS Objekte=Arrays sind war mir klar aber....:
Wenn links[] ein vollständiges Array ist, warum funktioniert
alert(document.links.join()) nicht, dafür aber
A=new Array;
A=A.concat(document.links);
alert(A.join())
getestet in einem NN4.7 Linux.
Ich will mich ungern auf Selfhtml V7.0 stützen aber ich denk mir es hat schon
seinen Grund warum nur links.length aufgeführt wird.
Viele Grüße
Rolf
Naband! ;-)
Wenn links[] ein vollständiges Array ist, warum funktioniert
alert(document.links.join()) nicht, dafür aber
Mmh, gute Frage. Ich schaetze, ein Array-Objekt (was document.links nicht ist), ist eben ein assoziatives Array, welches die speziellen Methoden join, splice usw. unterstuetzt, genauso wie z.B. ein window-Objekt die speziellen Methoden open, moveBy usw. hat. Aber wirklich wissen tu ich das nicht.
Ich will mich ungern auf Selfhtml V7.0 stützen aber ich denk mir es hat schon
seinen Grund warum nur links.length aufgeführt wird.
Naja, in Selfhtml steht vieles nicht, was es ueber JS zu wissen gibt.
So long
Morchen :)
ich hab jetzt die halbe nacht dokus gewälzt und bin nicht viel schlauer.
alert(document.links) liefert [object LinkArray]
Eine Googlesuche von LinkArray liefert kaum brauchbares.
Wie auch immer, meine Vermutung ist wir müssen bei JS zwischen dem
(hashfähigen) primitiven container array und dem Array-Object unterscheiden
(Groß/Klein beachten).Nur das Array-Objekt kennt Methoden, array ist nur
eine Sequenz von Pointern auf Speicherplätzen die andere Daten
enthalten. Auf diese Daten kann dann wahlweise über Index oder Hashnamen
zugegriffen werden.
Die Aussage alle Objekte sind arrays, besagt dass alle Objekte
intern wie in diesem Datentyp array abgelegt werden, der z.B. indizierung
erlaubt und nicht dass alle Objekte Unterobjekte des Array-Objektes sind,
die die Array-Methoden erben. Bei Date,document ... wirste deswegen auch
kein join() finden!
Dass macht auch Sinn den das Objekt Array kann ja nicht intern als
Array abgelegt werden, da beißt sich ja der Hund in den Schwanz vor lauter
Rekursion!!!
LinkArray, ImageArray, usw. sind dann der Vollständigkeit halber eigene
Objekte die als arrays anderer Objekte ergeben und zusätzlich
noch ein paar Methoden und Eigenschaften spendiert bekommen haben.
LinkArray kennt halt length und nicht join().
Was Jaschas Problem betrifft die Links mit Namen anzusprechen, bin ich skeptisch,
da es ja eigentlich auch Anchor bzw AnchorArray (document.anchors) gibt,
die die name-angaben aufnehmen!
Nun genug der interpretationen, wenn mir jemand mit ner vernünftigen URL
zu diesem Thema weiterhelfen kann wär ich ihm sehr dankbar.
Viele Grüße
Rolf
Morchen :)
Ebenfalls!
Wie auch immer, meine Vermutung ist wir müssen bei JS zwischen dem
(hashfähigen) primitiven container array und dem Array-Object unterscheiden
(Groß/Klein beachten).Nur das Array-Objekt kennt Methoden, array ist nur
eine Sequenz von Pointern auf Speicherplätzen die andere Daten
enthalten. Auf diese Daten kann dann wahlweise über Index oder Hashnamen
zugegriffen werden.
Das meinte ich in meinem vorigen Posting.
Was Jaschas Problem betrifft die Links mit Namen anzusprechen, bin ich skeptisch,
da es ja eigentlich auch Anchor bzw AnchorArray (document.anchors) gibt,
die die name-angaben aufnehmen!
Ich denke, das ist lediglich ein Problem in derselben Kategorie, wie dass z.B. NN4 in seinem images-Array nur Bilder mit Namen auffuehrt, die mit <IMG NAME> im Quelltext stehen, aber nicht welche, die mit <IMG ID> ihren Namen erhalten haben.
So long
Hi again Cal!
Das geht in Netscape nicht, aber Jascha schrieb ja document.links["sonstwas"].onmouseover, nicht document.images["sonstwas"].onmouseover, und fuer Links wird der OnMouseOver-Handler ja auch in Netscape interpretiert.
Ich hab noch nie gesehen, dass man den Eventhandler auf diese Weise
dynamisch zuweisen konnte und hätte gerne einen Dokulink
darauf. Interessiert mich ehrlich brennend! :)
Aus deinen bisher geposteten URLs konnte ich kein solches Beispiel
gewinnen. Natürlich hat das Link-Objekt Eventhandler, aber schreibender
Zugriff aus JS heraus ???
Viele Grüße
Ro * der gerne dazulernt * lf
ReHi again Cal!
Nun gut, mein Linuxnetscape kanns zwar nicht, dafür klappts überall
auf der Win98 Seite!
Test(){alert("jojo")};
void(document.links[0].onmouseover=Test);
Viele Grüße
Ro *der ständig dazulernt* lf
PS: Kann mir einer erklären warum nur links, aber nicht
das Link Objekt in SelfHtml 7.0 auftaucht?
Auch Hi again!
Aus deinen bisher geposteten URLs konnte ich kein solches Beispiel
gewinnen. Natürlich hat das Link-Objekt Eventhandler, aber schreibender
Zugriff aus JS heraus ???
Die Stelle, wo's steht, finde ich jetzt leider nicht. Aber auf http://developer.netscape.com/docs/manuals/js/client/jsref/handlers.htm findest Du bei einigen Beispielen diese Variante angewendet.
Prinzipiell ist ein <A ... onMouseOver="some JS code"> nur ein Shortcut fuer ein spaeteres
document.links[...].onmouseover = new Function("some JS code");
d.h. der Browser belegt die Handler beim Laden automatisch mit solchen anonymen Funktionen.
So long