Wenn o existiert - was bereits vorher geprüft wird - funktioniert das tadelos:
Ja, wg.
var o = document.getElementById(id);
if(!o) return r;
?!
selfHTML sagt: getElementById() existiert ab NN 6.x, IE 5.5, Op 5.12, Moz 1, Kon 3.1, Saf 1.0!
dumm, im Orginal binde ich ein Skript ein, das document.getElementById für die fehlenden Browser umsetzt. Daher fehlt hier noch if(!document.getElementById) return ...
selfHTML sagt auch: offsetTop existiert ab IE 4, Op 7, Moz 1, Kon 3.1, Saf 1.0!
Entweder selfHTML irrt (kommt ja vor), oder ich sehe hier eine Menge an Browsern, die deine Prüfung schaffen, bei Aufruf von defined() (mangels offsetTop) aber die Grätsche machen.
Es ist genau umgekehrt, es kennen mehr Browser die Eigenschaft offsetLeft/Top als document.getElementById, z.b. mein geliebter IE 4 und die machen bereits da die "Grätsche".
Wie gesagt, wenn o ein Objekt ist kannst du auf jede x-beliebige Eigenschaft prüfen ohne das irgendjemand die "Grätsche" macht. Solltest du aber Wissen, zumal ich dir ein funktionierendes Beispiel gezeigt habe.