Problem mit getElementsByTagName("p")

Amanda23

Grünschnabel
Hallo liebe Wissende :)

Ich habe ein seltsames Problem mit getElementsByTagName("p") und finde selbst keine Antwort darauf.
Ich bin dabei ein kleines Programm in Javascript zu schreiben, mit dem ich bewirken möchte, dass beim Vorkommen eines bestimmten Wortes innerhalb eines <p></p>, dieses Wort durch einen Link ersetzt wird, wenn man einen Button klickt.
Um die Worte zwischen den <p></p> zu erhalten, wollte ich die Funktion
Code:
getElementsByTagName("p")[i].firstChild.data
verwenden. (i ist der Index, den ich mitlaufen lasse)
Und da beginnt mein Problem: Ich schaffe es z.B. nicht, ganz einfach nur den Text innerhalb des Paragraphen mit Hilfe von
Code:
document.write(getElementsByTagName("p")[i].firstChild.data);
auszugeben, geschweige denn, dass ich eine for-Schleife laufen lassen kann, die nach und nach i hochzählt und damit das ganze Dokument nach den enthaltenen Paragraphen absucht.
Ich weiß da echt nicht weiter. Ich habe es jetzt mit dem Firefox 3.0.10 und dem IE8 ausprobiert, aber bei beiden geht es nicht. Also die nehme ich an am Browser liegt es nicht.
Gibt es denn irgendwelche Beschränkungen für die Methode von denen ich nichts weiß? :confused:

Hier mal mein Beispiel:
Code:
function neuerLink () {
     var anzp = document.getElementsByTagName("p").length;
	for(var i=0; i<anzp; i++){
            var s = (document.getElementsByTagName("p")[i].firstChild.data);
	    document.write("Satz neu: " + s);
	 }
	}
So, wie es hier da steht, wird bei mir nur einmal Satz neu: mit dem Inhalt des ersten Paragraphen ausgegeben, aber alle anderen werden übersehen.

Vielleicht kann mir jemand noch einen Tipp dazu geben.

Vielen Dank jetzt schon mal dafür.

Amanda
 
Zuletzt bearbeitet von einem Moderator:
Moin Amanda,

willkommen an Board und danke für die nette Begrüssung :)

das Problem liegt ganz woanders, nämlich hier:
Code:
document.write("Satz neu: " + s);

Wenn man die Methode write() nach dem Laden eines Dokumentes aufruft, wird sie das komplette Dokument überschreiben...sowohl die <p>'s, als auch das Skript selbst. Nach dem 1. write() ist also alles weg, es befindet sich nur noch das im Dokument, was du per write() hineingeschrieben hast.

Lösung: verzichte auf write() nach dem Laden eines Dokumentes, es gibt ja noch andere Wege, Text im Dokument zu erzeugen, wie bspw. innerHTML oder das Zuweisen von Text an die data-Eigenschaft eines Textknotens.
 
Hi Amanda,

mit document.write überschreibst Du ja auch Dein Dokument. Ersetze das mal durch ein alert.

Und packe Code bitte in die dafür vorgesehenen Tags, dann kann man das besser lesen.

LG
 
Hallo Ihr beiden Helfer :)

Vielen, vielen Dank für die schnelle Hilfe.
Ich war schier am Verzweifeln gewesen, weil ich wußte, dass es eigentlich gehen muß, aber immer nicht funktionierte.
Dass write alles überschreibt, wußte ich nicht. Mit dem alert geht alles wie geschmiert.

Ich gelobe auch Besserung und werde nächstes Mal den Quellcode in die dafür vorgesehene Funktion einfügen.

Danke nochmals.:)

Amanda
 

Neue Beiträge

Zurück