Linktext in a-Tag mit nodeValue setzen?


#1

Hi,
ich stehe auf dem Schlauch bei einer winzigen Sache…
Ich mußte bisher in einer sehr kurzen Ausgabezeile (Überschrift einer schmalen Liste) den Wert dynamisch ändern in Abhängigkeit davon, auf welches Listenelement geklickt wurde.
War funktionierend realisiert mit:

echo "<span style=\"color: #FFFFFF; font-size: 10px;\" id=\"aktDir\">...</span>\n"; ...und später dem Scriptbefehl: echo " document.getElementById(\"aktDir\").firstChild.nodeValue = \"".$dirtext." (".$numfiles.")\"\n";
Leider reicht das jetzt nicht mehr, ich muß jetzt hinten an diesen kurzen String (aufgebaut aus $dirtext und $numfiles) noch einen Link hängen, bei dem ich sowohl Text, als auch Ziel dynamisch setzen muß.
Habe ich auf alle möglichen Arten versucht, zum Schluß jetzt mit:

echo "<span style=\"color: #FFFFFF; font-size: 10px;\"><span id=\"aktDir\">...</span><a id=\"aktDirRef\" href=\"\"></a></span>\n"; ...und den beiden zusätzlichen Scriptbefehlen: echo " document.getElementById(\"aktDirRef\").firstChild.nodeValue = \"".$infolink."\"\n"; echo " document.getElementById(\"aktDirRef\").firstChild.setAttribute("href", = \"".$reflink."\"\n";
(habe es zum Schluß mit einen zweiten span-Tag probiert, damit die beiden relevanten Tags nicht mehr verschachtelt sind)
Aber bei allen meinen Versuchen das gleiche Ergebnis:
Schon wenn ich die erste dieser beiden Scriptzeilen aktiv lasse, habe ich einen Fehler, die zweite habe ich bislang noch permanent auskommentiert (in Wahrheit sind es die zweite und dritte Zeile, der Übersichtlichkeit halber habe ich die nach wie vor vorhandene Originalzeile siehe erster Code unten nicht nochmal eingefügt).

Da diese neue Zeile und die Originalzeile 100% identisch aufgebaut sind, spreche ich wohl den a-Tag falsch an…?

Leider habe ich den Auftritt zur Zeit nicht auf dem Entwicklungsserver eingerichtet, darum muß ich die Seiten ohne Fehlerausgabe life auf dem echten Webserver “testen” :slight_smile: Angesichts dieser doch ziemlich lächerlichen Anpassung hatte ich mich das bedenkenlos “getraut”…

danke


#2

Dein a-Element ist vollkommen leer, und hat deshalb gar kein firstChild.

Mach’s einfach mit innerHTML.


#3

Hi & danke,
was heißt “vollkommen” leer?
Ich habe extra ein href="" mit reingenommen, um es vorzubesetzen.

Ja, innerHTML, früher habe ich damit rumgebastelt, aber das soll ja wacklig sein von Standard/Unterstützung und bei den ganzen Browsern für Mobil-Betriebssysteme heute, da scheue ich mich, solche Sachen noch zu verwenden…


#4

Leer heisst kein Element-Inhalt – nix zwischen und . Damit hat das Element keine Kindknoten, und deshalb kannst du auch auf kein firstChild zugreifen.

Und innerHTML kannst du ruhig benutzen, das unterstützen alle Browser seit Ewigkeiten, und es ist inzwischen sogar standardisiert.


#5

Ja, sorry, hatte inzwischen selbst kapiert, was Du meinst, es mit einem   vorbesetzt und dann klappte die Zeile.
Hatte mich hier aber nicht gemeldet, weil die letzte Zeile immer noch nicht akzeptiert wurde (auch nach Löschen des Gleichheitszeichens, das mir da beim Kopieren reingeraten war). Da habe ich rumgetestet.

Mit innerHTML kommt man auch (schreibend) an den Wert für href ran? Schau ich mal, danke.


#6

Nein, nur an den Element-Inhalt, nicht an Attribute. Du müsstest also innerHTML des Elternelementes neu setzen, mit den vollständigen Tags inklusive der Attribute (‘bar’) für das Kindelement, das du einfügen willst.

Und deine „letzte Zeile“ hat vorher nicht funktioniert, weil das a-Element kein firstChild hatte. Und selbst wenn du jetzt Inhalt in das a-Element eingefügt hast, bewirkt sie natürlich immer noch nichts – weil du eigentlich das href-Attribute des a-Elements setzen willst, es stattdessen aber für das erste Kindelement setzt … und span kann mit href wenig anfangen.

(Und da braucht’s kein setAttribute für, ein simples [referenz-auf-das-a-element].href = “foo” tut’s auch.)


#7

also danke, habe es gestern umgesetzt und funktioniert alles, so sieht es jetzt aus:

echo "<span style=\"color: #FFFFFF; font-size: 10px;\"><span id=\"aktDir\">...</span>&nbsp;<a name=\"aktDirRef\" target=\"pg_photos\" href=\"\"> </a></span>\n"; ...und später den Scriptbefehlen: echo " document.getElementById(\"aktDir\").firstChild.nodeValue = \"".$dirtext." (".$numfiles.")\"\n"; echo " document.getElementsByName(\"aktDirRef\")[0].firstChild.nodeValue = \"".$infolink."\"\n"; echo " document.getElementsByName(\"aktDirRef\")[0].href=\"".$reflink."\"\n";
Etwas chaotisch:
Beim ersten habe ich es bei “id” gelassen (never touch a running system…), beim zweiten habe ich die name-Eigenschaft verwendet. Habe auch beim zweiten für den Wert noch die Node-Variante benutzt, da sie funktioniert hat. Nur für das Linkziel habe ich die Methode geändert.
Und wegen zweimal node ist mir wieder nix besseres eingefallen als den ersten span zu zerlegen, damit die beiden Elemente (ein span und ein a) auf einer Ebene liegen und nicht der a-Tag verschachtelt in dem span-Tag liegt, der über seine id angesprochen wird (verschachtelt hat der Zugriff auf den a-Tag nicht funktioniert).

danke nochmal


#8

Hi !

Ich möchte einen Text auf einer webseite dynamisch ändern. Je nach dem was in einer Combobox ausgewählt wurde soll ein anderer Text dranstehen.

Hat jemand ne Ahnung wie das geht ? Ich muss ja irgendwie ein Objekt haben, das ich ansprechen kann.

Habs mal mit dem DIV Tag versucht. Also:
Code:
1.

Text