The "classic example", take 2
Wednesday, 3. January 2007, 05:44:37
if(!document.getElementById)void()
else
{
//continue
}... everything bothering me
Wednesday, 3. January 2007, 05:44:37
if(!document.getElementById)void()
else
{
//continue
}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}
}
)();
}Friday, 15. December 2006, 01:41:33
if (!window.XMLHttpRequest)
{
(function()
{
var temp;
var types = [
'MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.3.0'
];
for (var i = 0; i < types.length; i++)
{
try
{
void((temp = function(){return new ActiveXObject(types[i])})());
}
catch {temp = null}
if(temp) break;
}
window.XMLHttpRequest = temp || function(){return undefined};
}
)();
}
void(temp = function(){return new ActiveXObject(types[i])}());
// reformatted looks like this:
void( /* void the result, to protect browsers
that return/throw "false" or similar */
(temp = function() /* assign a function to the variable... */
{
return new ActiveXObject(types[i])
})() /* and then call it by inserting parenthe-
ses after those enclosing the function */
);
Saturday, 9. December 2006, 23:44:20
if (!window.XMLHttpRequest)
{
var temp;
var types = [
'MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.3.0'
];
for (var i = 0; i < types.length; i++)
{
try
{
temp = function(){return new ActiveXObject(types[i])};
void(temp());
}
catch(e) {temp = null;}
finally {if(temp) break;}
}
window.XMLHttpRequest = temp || function(){return undefined};
}
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
|
| ||||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 | ||||