• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

getElementsByTagName gibt bei "a" nur href zurück

Andwari

Neues Mitglied
Hi! Ich bin grad völlig ratlos. Ich möchte eine Reihe a-Elemente mittels getElementsByTagName ansprechen um deren Hintergrund zu ändern.
Das Problem: anstatt das a-Element gibt mir die Funktion den Inhalt des href zurück.
Was mich aber richtig verwirrt ist, dass wenn ich anstatt "a" zb nach "img" suche, gibt es mir das gewünschte img-Element zurück.
Muss ich bei "a" etwas extra beachten???

Minimalbeispiel:
HTML:
<html>
    <head>
        <title>tagnametest</title>
        <script type="text/javascript">
            function check1() {
                var as = document.getElementsByTagName("a");
                alert(as[0]); //gibt javascript:check1() zurück
            }
            function check2() {
                var imgs = document.getElementsByTagName("img");
                alert(imgs[0]);    //gibt [object HTMLImageElement] zurück
            }
        </script>
    </head>
    
    <body>
        <img href="#" src="" />
        <a href="javascript:check1()">bla</a>
        <a href="javascript:check2()">blo</a>
    </body>
</html>

Warum dieses unterschiedliche Verhalten??
 
Werbung:
Der Unterschied in deinem Beispiel-Code liegt darin, dass Du nur 1 img-Element aber 2 Links hast die über die Funktionen gefunden werden. Zudem liefert

Code:
document.getElementsByTagName("a")

ein Objekt zurück und keine konkreten Strings. Wenn Du jetzt die Farbe eines der Objekte ändern willst, musst Du auf dieses zugreifen und die entsprechende Style-Angabe machen.

Code:
as[0].style.backgroundColor = "red";
 
Hallo und danke für die Antwort.
Das stimmt allerdings so nicht ganz. getElementByTagName gibt ja ein Array aller in Frage kommenden Elemente zurück, deswegen greif ich auch jeweils auf den ersten Eintrag zu. Mit zwei img-Elementen ergibt sich der gleiche Fehler.
Und das es ein Objekt zurück gibt und keinen String, ist mir klar. Aber wie ich oben auch dazu kommentiert habe, gibt die erste Funktion eben nicht "object HTMLAnchorElement" oder so zurück, sondern "javascript:check1()", was ja definitv kein Objekt ist.
Merkwürdigerweise kann aber dennoch dem as[0] die Hintergrundfarbe zuweisen, so wie du es getan hast ... also gibt es wohl doch das korrekte Objekt zurück, auch wenn "alert" was anderes behauptet ...

still confused
 
Werbung:
Aha! Tausend Dank! Dann hat ja doch alles richtig funktioniert, nur der alert(as[0]) gab was komisches raus. :) Hab das Problem zwar mittlerweile mit JQuery umschifft, aber trotzdem gut zu wissen.
 
Und wenn du schon Genauigkeit liebst:
PHP:
window.document.addEventListener("DOMContentLoaded", function () {
	var keinArray = window.document.getElementsByTagName("div");
	if (keinArray instanceof Array) {
		alert("true");
	} else {
		alert(keinArray);
	}
}, false);

getElementsByTagName() liefert kein Array zurück, sondern ein HTMLCollection-Objekt.
 
Werbung:
Zurück
Oben