The "classic example"
Friday, 15. December 2006, 02:22:59
Inspired by hallvors' Capability Detection and a follow-up post from Crisp, I tried to improve on the "classic example"...
if (!document.getElementById)
{
(function()
{
var obj = {};
if (document.all)
{
obj = document.all;
}
else if (document.layers)
{
obj = document.layers;
}
document.getElementById = function(id){return obj[id]};
}
)();
}
edit: I also thought about really fixing this, as to change the output from "undefined" to "null" in the case that there is no element with that Id (according to spec), but I figured if someone is stupid enough to check explicitly against null or undefined, instead of normal object detection, then he earned the burn. I really can't imagine a scenario where this "feature" of the function is mandatory.
If there ever occurred such a scenario, however... replace
document.getElementById = function(id){return obj[id]};
by
document.getElementById = function(id){return obj[id] ? obj[id] : null};
or, if there are browsers out there that return "undefined" instead of "null" (natively), you might want to add this instead (update 2007/08/28: Don't use, it's dirty)
if (!document.getElementById(null) && document.getElementById(null) !== null)
{
(function()
{
var obj = document;
var func = 'getElementById';
var key = '_';
while (obj[key+func]) {key+=key};
obj[key+func] = obj[func];
obj[func] = function(id){return obj[key+func](id) || null}
}
)();
}









