JavaScript funktion im quelltext ändern

striker159

Lt. Junior Grade
Registriert
Dez. 2008
Beiträge
332
hi
ich bin grad dabei mir ein greasemonkey script zu schreiben, welches eine function a() durch eine von mir ersetzt.
du function a() wird in einer externen .js datei deklariert.

der qc sieht so aus von der seite:
Code:
<a href="javascript:a();">A</a>

jetzt will ich ,dass stattdessen die funktion a_neu() aufgerufen wird. hab es dann so probiert:
script quelltext :
Code:
function a_neu() {
   code
}
var tabellen = document.getElementsByTagName ('th');
                 for (var i = tabellen.length - 1; i >= 0; i--){
                        if(tabellen[i].innerHTML.search('A')!=-1){
                                  var alt="<a href=\"javascript:a();\">A</a>"
                                  var neu="<a href=\"javascript:a_neu();\">A</a>"
                                  tabellen[i].innerHTML=tabellen[i].innerHTML.replace(alt,neu);
                        }
                 }

jetzt steht im quelltext zwar <a href="javascript:a_neu();">A</a>,
aber da "a_neu()" nicht im quelltext definiert ist, passiert garnichts.

wie stell ich das also am besten an, meine eigene funktion da aufzurufen
 
innerHTML beschreibt den INHALT eines element, NICHT das element selbst. also kannst du auf diese methode auch nicht einfach das A-element ersetzen.
sinnvoller ist es, die betreffenden A-elemente über DOM zu suchen und ihr attribute onClick direkt mit einer lambda-funktion neu zu belegen.

element.onclick = function () { a_new(); };
 
könntest du mir das nochma für noobs erklären bzw einen codevorschlag machen^^
hab mich nämlich nicht wirklich mit javascript befasst
 
Ich habs nicht getestet, aber so sollte es gehen...

OnClick-Event für jedes 'a' im 'th' bestimmen ...
Code:
var tabellen = document.getElementsByTagName ('th');
for (var i = tabellen.length - 1; i >= 0; i--){
	var tab_a = tabellen.getElementsByTagName ('a');	
	for (var x = tab_a.length - 1; x >= 0; x--){
		
		tab_a[x].onclick = function(){
			a_neu();
			return false;
			};	
		
				
		}
	}

Oder nur für bestimmte ...
Code:
var tabellen = document.getElementsByTagName ('th');
for (var i = tabellen.length - 1; i >= 0; i--){
	var tab_a = tabellen.getElementsByTagName ('a');	
	for (var x = tab_a.length - 1; x >= 0; x--){
						
		if(tab_a[x].href == "javascript:a();"){
			tab_a[x].onclick = function(){
				a_neu();
				return false;
				};
			}
		
		}
	}

Ist nur ein Ansatz und habs nicht getestet. Das "return false;" ist in dem Fall wichtig, wenn das "href" des Links nicht nach dem "onclick"-Event zusätzlich ausgeführt werden soll.
 
das hört sich schonmal ziemlich gut an :)
aber mal ne frage. hat ein a-element eine onclick-ereignis?
kenne das eingentlich nur von buttons und so.

Code:
if(tab_a[x].href == "javascript:a();"){
			tab_a[x].onclick = function(){
				a_neu();
				return false;
				};
			}
da macht er garnichts. fehlerkonsole zeigt auch nichts an.

wenn ich dass hier benutze

Code:
if(tab_a[x].href == "javascript:a();"){
			tab_a[x].href = "javascript:function(){"+
				"a_neu();"+
				"return false;"+
				"}";
			}
dann wird zwar als neuer link "javascript:function(){a_neu();return false;} angezeigt,
jedoch passiert wieder nichts, da, wie in meinem anfangsversuch a_neu nicht definiert ist im html quelltext

edit:
habs jetzt selbst hinbekommen, und zwar mit :
Code:
if(tab_a[x].href == "javascript:a();"){
			tab_a[x].href = "javascript:a_neu(){/*code+*/}a_neu();"
			}
 
Zuletzt bearbeitet:
Zurück
Oben