Problem mit getElementsByTagName("a")
Rhapsy
- javascript
0 twseiten_de0 Rhapsy0 twseiten_de0 zippy
0 Struppi
0 zippy0 MudGuard
0 Rhapsy
Hallo,
ich versuche über a = document.getElementsByTagName("a") an die links auf einer website heranzukommen. hab im netz keine andere möglichkeit gefunden und scheint ja auch bei allen anderen zu funktionieren - nur bei mir nicht ;)
Hab auch schon versucht dass ganze über intervalID = setInterval("test()", 1000); mit Zeitverzögerung hinzubekommen, da ich dachte, dass es vielelicht noch nicht fertig geladen ist. aber auch da nix.
ich bekomm als a.length immer 0!
zum aufbau des ganzen:
habe ein rechts-klick-menüpunkt angelegt:
<popup id="contentAreaContextMenu">
<menuitem id="Memorize"
insertbefore="context-sep-viewbgimage"
oncommand="futures_Memorize(gContextMenu.linkURL)"/>
</popup>
und dann die js-funktion (da ich nie in die if anweisung hineinkomme, können sich da auch noch fehler versteckt hab, aber die sind auch gerade nicht wichtig ;)):
function futures_Memorize(tempLink)
{
var a = document.getElementsByTagName("a");
if (a.length>0)
{
for(var i = 0; i < a.length; i++)
{
if(a[i].hasAttribute("href") && a[i].href==templink)
{
Entrytitle.push(a[i].title);
Entryurl.push(a[i].href);
}
}
}
}
grüße,
rhapsy
Hallo,
bezüglich Internet Explorer und dessen HTML-DOM nachfolgend alle Collectionen zum Objekt documment. Collection ist ein Feld von Referenzen z.B. Zeigerfeld von Link-Objekten.
Eine Collection kann naturülich auch programmiert werden z.B. in dem
per getElementsByXXXX-funktionen die Zeiger eingesammelt werden in ein Feld. Das ist nötig, wenn keine Collection zum Objekt bereits vorhanden ist (doucment hat aber collection linkls)
Gruss Tom.
Collection Description
all Returns a reference to the collection of elements contained by the object.
anchors Retrieves a collection of all a objects that have a name and/or id property. Objects in this collection are in HTML source order.
applets Retrieves a collection of all applet objects in the document.
childNodes Retrieves a collection of HTML Elements and TextNode objects that are direct descendants of the specified object.
embeds Retrieves a collection of all embed objects in the document.
forms Retrieves a collection, in source order, of all form objects in the document.
frames Retrieves a collection of all window objects defined by the given document or defined by the document associated with the given window.
images Retrieves a collection, in source order, of img objects in the document.
links Retrieves a collection of all a objects that specify the HREF property and all area objects in the document.
namespaces Retrieves a collection of namespace objects.
scripts Retrieves a collection of all script objects in the document.
styleSheets Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document.
Hallo Tom,
danke für die schnelle Antwort.
Nun hatte ich doch glatt vergessen zu erwähnen, dass sich das ganze in einer Firefox Extension befindet...
also nützen mir die collections des IE nicht viel. leider! (davon hatte ich nämlich auch schon gelesen ;)
grüße,
rhapsy
Hallo,
Gecko-HTML-DOM bitte anschauen
http://developer.mozilla.org/en/docs/JavaScript
http://developer.mozilla.org/en/docs/Gecko_DOM_Reference
Gruss Tom.
Hallo,
Gecko-HTML-DOM bitte anschauen
http://developer.mozilla.org/en/docs/JavaScript
http://developer.mozilla.org/en/docs/Gecko_DOM_ReferenceGruss Tom.
Sehr gute Antwort auf seine Frage. Du hättest auch schreiben können: "Fische leben im Wasser, bitte nachsehen!" Total sinnfrei ...
Hallo,
stimmt, der Sinn der Fisch-Wasser-Theorie wird erst dann sichtbar, wenn man weiss, dass z.B. manche Fische Salzwasser nutzen, gell.
Das ist auch so beim HTML-DOM der Browser. Man muss sich auskennen oder suchen, stimmts :-). Wer HTML-DOM nutzt, wird oft jaulen über Browser-Divergenzen.
Gruss Tom.
Hallo
Das hat doch nicht das geringeste mit dem DOM zu tun. Erstens kennt jeder Browser getElementsByTagName und zweitens geht es hier um seine Unfähigkeit, Extensions zu programmieren. Ließ dir mal den Beitrag von mir weiter oben durch, da steht das drin, was er wissen möchte. Ihm scheint es aber unmöglich zu sein, dies bereits in der Fragestellung zu klären.
Grüße zippy
getElementsByTagName() ist eine (HTML-)DOM-Funktion, da sie den Baum
der HTML-Hierarchie abklappern kann. Browser nutzen dazu auch Collectionen (z.T. interne). Letzendlich sind fast alles nur Zeiger auf Instanzen.
Ob der Poster unfähig ist, weiss ich nicht. Erahnen kann man schon, was er will. Dann also auch helfen - versuchen.
Gruss Tom.
getElementsByTagName() ist eine (HTML-)DOM-Funktion, da sie den Baum
der HTML-Hierarchie abklappern kann. Browser nutzen dazu auch Collectionen (z.T. interne). Letzendlich sind fast alles nur Zeiger auf Instanzen.
Was hast du nur immer mit deinen Collections, das hat doch nichts das geringste mit seiner Fragestellung zu tun. Irgenwie begreifst du das scheinbar nicht. Auch weiß ich nicht warum du ständig HTML-DOM sagst ... Ich gebs auf ... sinnlose Posts ... oh das mache ich ja auch gerade ... du scheinst ein noob zu sein, die hängen sich auch immer an ihrem Wissen auf und wiederholen sich ständig ...
du versuchst zu erklären, dass ein getElementsByTagName eine Collection von Elementen zurück gibt, doch was hat das mit seiner Frage zu tun, ich verstehs nicht, warum du so andwortest, ich schüttel schon 3h mit dem Kopf ...
Grüße zippy
also nützen mir die collections des IE nicht viel. leider! (davon hatte ich nämlich auch schon gelesen ;)
document.links existiert in allen Browsern, die JS können, wie kommst du darauf dass das nur der IE könnte?
Struppi.
Hallo
Hey du hantierst dort mit XUL ... Wie kann ich dann den Zusammenhang zu deinem Problem herstellen? Wo sind die anchor - Elemente, vielleicht in einem anderen Namespace (getElementsByTagNameNS)?! Auch fehlt deinem menuitem eine label ...
Ah jetzt weiß ch wie du das meinst, du willst aus der Extension die anchor - Elemente des Browser - Window hersuasfinden. Du musst dir grundsätzlich das Window holen, auf das iframe - Element zugreifen und auf dessen document. Dort kannst du die Methode getElementsByTagName anwenden. Wie man allerdings das Window - Element bekommt bin ich überfragt, ist auch schon sehr lange her, dass ich Extensions programmiert habe. Aber schau doch einfach mal bei xulplanet.com vorbei, die kennste ja sicherlich schon. Da gibt es sicher eine XPCOM - Object dafür ...
Naja viel Spass beim suchen!
Grüße zippy
Hallo Zippy,
danke für die hilfe. ich war suchen und hab gefunden was ich suchte. ich muss das ganze mit var a = window.content.document.getElementsByTagName("a"); aufrufen und schon bekomm ich meine nodelist ...
dankeschön...
Rhapsy
Ah jetzt weiß ch wie du das meinst, du willst aus der Extension die anchor - Elemente des Browser - Window hersuasfinden. Du musst dir grundsätzlich das Window holen, auf das iframe - Element zugreifen und auf dessen document. Dort kannst du die Methode getElementsByTagName anwenden. Wie man allerdings das Window - Element bekommt bin ich überfragt, ist auch schon sehr lange her, dass ich Extensions programmiert habe. Aber schau doch einfach mal bei xulplanet.com vorbei, die kennste ja sicherlich schon. Da gibt es sicher eine XPCOM - Object dafür ...
Naja viel Spass beim suchen!
Grüße zippy
Hi,
Mal abgesehen vom eigentlichen Problem:
if (a.length>0)
{
for(var i = 0; i < a.length; i++)
{
[...]
}
}
Welchen Zusatz-Nutzen erwartest Du Dir von diesem if um diese Schleife?
cu,
Andreas
Hallo Andreas,
jetzt wollte ich schon sagen: "Na dass die schleife nur ausgeführt wird, wenn auch mind. ein link da ist" ... 2 sekunden später ... "hmm sie wird ja sonst auch nur ausgeführt, wenn mind. ein link in der nodelist ist"
danke für den tipp ;)
rhapsy
Hi,
Mal abgesehen vom eigentlichen Problem:
if (a.length>0)
{
for(var i = 0; i < a.length; i++)
{
[...]
}
}Welchen Zusatz-Nutzen erwartest Du Dir von diesem if um diese Schleife?
cu,
Andreas