document.getElementById() überschreiben
Christian
- javascript
Hi,
ich möchte die Methode document.getElementById überschreiben. Die neue Methode soll das Objekt mit der ID zurückgeben (wie gehabt) und zusätzlich weitere Dinge machen.
Habe folgendes versucht:
document.getElementById = function(id)
{
// mache was...
return document.getElementById(id);
}
Jedes mal wenn man dann diese Methode aufgerufen wird, soll zusätzlich irgendwas gemacht werden und dann ganz normal das entsprechende Objekt zurückgegegeben werden.
Problem ist: Es ist eine rekursive Methode und sie ruft sich jedesmal wieder neu auf!
Hat jemand ne Idee, wie ich das machen kann?
würde ich
return document.all[id]
ging es im IE, aber das soll natürlich überall gehen!
Gruß
Christian
Moin,
Problem ist: Es ist eine rekursive Methode und sie ruft sich jedesmal wieder neu auf!
Also wenn das funktioniert (das geht wirklich?), dann sollte doch auch bla = document.getElementById; document.getElementById = function(id) { ... return bla(id); } tun. Aber kannst du dein Problem nicht eleganter lösen?
Hallo,
ich möchte die Methode document.getElementById überschreiben. Die neue Methode soll das Objekt mit der ID zurückgeben (wie gehabt) und zusätzlich weitere Dinge machen.
Habe folgendes versucht:
document.getElementById = function(id)
{
// mache was...return document.getElementById(id);
}
Jedes mal wenn man dann diese Methode aufgerufen wird, soll zusätzlich irgendwas gemacht werden und dann ganz normal das entsprechende Objekt zurückgegegeben werden.
Problem ist: Es ist eine rekursive Methode und sie ruft sich jedesmal wieder neu auf!
Klar, das. Die Anweisung return document.getElementById(id) ruft document.getElementById(id) auf. ;-))
Du hast das Prinzip der OOP nicht richtig verstanden. Methoden sind keine eigenständigen Objekte. Methoden _gehören_ zu Objekten. Überschreiben kann man nur Methoden der Super-Klasse. Mit anderen Worten: Das Überschreiben von Methoden funktioniert nur in einer Klasse, die eine andere Klasse erweitert und damit beerbt. Du musst also die Klasse "document" erweitern und in der Klassenbeschreibung dieser erweiterten Klasse die Methode überschreiben.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>MyDocument extends document</title>
<script type="text/javascript">
<!--
function MyDocument() {
this.prototype = document;
this.getElementById = function(id) {
alert("Hier bin ich erweitert.");
var iElem = this.prototype.getElementById(id);
return iElem;
};
this.writeln = function(str) {
this.prototype.writeln(str);
};
}
//-->
</script>
</head>
<body>
<h1 id="UE1">Überschrift</h1>
<p id="TA1">Textabsatz</p>
<script type="text/javascript">
<!--
myD = new MyDocument();
//Nutzen der erweiterten Methode
alert(myD.getElementById("TA1").firstChild.nodeValue);
//Nutzen einer ererbten Methode
myD.writeln("Hallo <b><i>Welt</i></b>");
//-->
</script>
</body>
</html>
Wie Du siehst, funktioniert die Vererbung bei JavaScript nicht immer automatisch. Das geht nur, wenn ein selbst erstellter Prototyp einen anderen selbst erstellten Prototyp erweitert. Hier muss die Methode writeln explizit "geerbt" werden.
viele Grüße
Axel