I’m working on fixing up the XMLHTTPRequest shoppingcart so it will work in IE5 and IE6.
While debugging, I came across the annoyance that IE5 doesn’t properly return an array of all objects for document.getElementsByTagName('*'). I use that to find out what elements need to have JavaScript enhancements applied to them (see alistapart for PPK’s take on this).
Mentioned this on #linux, and Nargler offered this solution:
function ie_getElementsByTagName(str) {
// Map to the all collections
if (str=="*")
return document.all
else
return document.all.tags(str)
}
if(document.all)document.getElementsByTagName=ie_getElementsByTagName;
Of course, I had to tinker.
var supportsDom=(document.getElementsByTagName('*').length)?1:0;
if(!supportsDom && document.all){
document.getElementsByTagName=function (str){
return(str=='*')?document.all:document.all.tags(str);
}
supportsDom=1;
}
The bonus here is that document.getElementsByTagName is used in all cases where possible (IE6, for example), and you also get a supportsDom variable which you can use to decide whether to bother trying to add your enhancements.
Comments