hi,
ich habe ein JavaScript im Dokument
z.B.
function test() { alert('test default'); }Dann füge ich per JavaScript einen neuen Script Knoten ein, der mit die aktuelle Test-Funktion "überschreibt".
z.B.
function test() { alert('test neu'); }Der DOM-Inspektor zeigt mir, dass die Funktion prinzipiell nicht überschrieben wird - sondern nur ein weiterer Skript Knoten mit derselben Funktion angefügt wurde.
Unterscheide bitte zwischen HTML-Elementen, und Javascript-Objekten.
Du hast ein neues HTML-Element script erstellt.
Dessen Inhalt wird interpretiert, die Funktion test überschrieben.
Da diese aber dem Skript-Stack später hinzugefügt wurde, wird von allen gängigen Browsern diese "neu" Funktion angesprochen und ausgeführt.
Ich möchte nun die "neu" Funktion wieder aus dem DOM entfernen, so dass die ursprüngliche "default" Funktion wieder verwendet wird.
Dies funktioniert auch einwandfrei - der DOM-Inspektor zeigt mir den zuvor hinzugefügten Knoten nicht mehr an.
Jetzt hast du das HTML-Element script aus dem DOM entfernt.
Das bewrikt aber keine Zeitreise, nach der der bereits interpretierte Inhalt dieses Elements wieder weg wäre.
Wenn ich nun aber wieder die Funktion test() ausführe, wird immer noch die Logik der "neu" Funktion ausgeführt, obwohl diese nicht mehr im DOM vorhanden ist.
Das HTML-Element script ist nicht mehr im DOM.
Das Javascript-Funktionsobjekt test hat damit aber nichts weiter zu tun.
- Weis jemand, wie ich meine zweite Funktion wieder vollständig entfernen kann? So dass die erste Funktion wieder greift?
Das geht nur, wenn du dir die ursprüngliche Funktion vorher sicherst.
var alteFunktion = function() { test() ; };
- Helfen würde mir auch, wenn es eine Möglichkeit gibt, auszuwählen, welche Version einer Funktion aufgerufen wird. Geht das?
Nur, wenn du dir selbst eine Versionierung schaffst.
- Kennt jemand eine Möglichkeit, einen Script Knoten eindeutig zu indentifizieren und auszuwählen - also nicht über getElementsByTagName?
Script hat kein ID-Attribut.
Andere Möglichkeiten des Zugriffs stehen dir ggf. offen, z.B. könnte Script das firstChild des head sein, je nachdem wo du es einfügst - etc., pp.
- Gibt es eine möglichkeit, bestehende Funktionsnamen zu manipulieren. Also z.B. aus "test()" die Funktion "test_alt()" zu machen?
Du kannst es machen wie oben beschrieben, dir die Funktion "kopieren". Die ursprüngliche Funktionsreferenz besteht dann natürlich weiterhin, so lange du nichts anderes mit ihr anstellst.
gruß,
wahsaga
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }