...utilizzando un commento condizionale
codice:
/*@cc_on
Element = function () {};

Element.prototype.getAttribute = function (attribute) {

    switch(attribute){
    case "class": attribute = "className";break;
    case "for": attribute = "htmlFor";break;
    case "style": return this.style.cssText;break;
    case "type":return(this.id)?document.getElementById(this.id).type:this.type;break;
    case "accesskey":return this.accessKey;break;
    case "maxlength":return this.maxLength;break;
    }
    return this[attribute];
}

Element.prototype.setAttribute = function (attribute, value) {
var interface = new Element;
switch(attribute){
  case "class": attribute = "className";break;
  case "for": attribute = "htmlFor";break;
  case "type": 
  var me=this.parentNode;
  if(!/id=/.test(this.outerHTML))
  	this.id=this.uniqueID;
  	
  this.outerHTML=this.outerHTML.replace(/type=[a-zA-Z]+/," ").replace(">"," type='"+value+"'>");
  var t=me.childNodes;
  var max=t.length;
  for(var i=0;i<max;i++)
	  if(t[i].id==this.id){
	  	t[i].getAttribute=interface.getAttribute;
	  	t[i].setAttribute=interface.setAttribute;  
	  }
  return;break;
  case "accesskey":this.accessKey=value;return;break; 
  case "style": this.style.cssText =value;return;break;
  case "maxlength":this.maxLength=value;return;break;
  }
    if(value.indexOf("on")!=0)
    	this[attribute] = function(){eval(value)};
    else
    	this[attribute] = value;
}
var __IEcreateElement = document.createElement;

document.createElement = function (tagName) {
    
    var element = __IEcreateElement(tagName);
    
    element.getAttribute=interface.getAttribute;
    element.setAttribute=interface.setAttribute;
    
    return element;
}
var interface = new Element;
onload=function(){
	var list=document.all;
	var max=list.length;
	
	while(--max)
	{
		list[max].getAttribute=interface.getAttribute;
		list[max].setAttribute=interface.setAttribute;
		
	}
	//HTML node
	list[0].getAttribute=interface.getAttribute;
	list[0].setAttribute=interface.setAttribute;
}
@*/
breve spiegazione:
codice:
Element = function () {};
creiamo un interfaccia Element da cui estenderemo tutti i nodi

codice:
Element.prototype.getAttribute = function (attribute) {

    switch(attribute){
    case "class": attribute = "className";break;
    case "for": attribute = "htmlFor";break;
    case "style": return this.style.cssText;break;
    case "type":return(this.id)?document.getElementById(this.id).type:this.type;break;
    case "accesskey":return this.accessKey;break;
    case "maxlength":return this.maxLength;break;
    }
    return this[attribute];
}
aggiungiamo la nuova getAttribute,
con supporto per class,for,style,type,accesskey,maxlength
codice:
Element.prototype.setAttribute = function (attribute, value) {
var interface = new Element;
switch(attribute){
  case "class": attribute = "className";break;
  case "for": attribute = "htmlFor";break;
  case "type": 
  var me=this.parentNode;
  if(!/id=/.test(this.outerHTML))
  	this.id=this.uniqueID;
  	
  this.outerHTML=this.outerHTML.replace(/type=[a-zA-Z]+/," ").replace(">"," type='"+value+"'>");
  var t=me.childNodes;
  var max=t.length;
  for(var i=0;i<max;i++)
	  if(t[i].id==this.id){
	  	t[i].getAttribute=interface.getAttribute;
	  	t[i].setAttribute=interface.setAttribute;  
	  }
  return;break;
  case "accesskey":this.accessKey=value;return;break; 
  case "style": this.style.cssText =value;return;break;
  case "maxlength":this.maxLength=value;return;break;
  }
    if(value.indexOf("on")!=0)
    	this[attribute] = function(){eval(value)};
    else
    	this[attribute] = value;
}
aggiungiamo la nuova setAttribute,
con supporto per class,for,style,type,accesskey,maxlength e per gli eventi onclick,ecc...
codice:
var __IEcreateElement = document.createElement;

document.createElement = function (tagName) {
    
    var element = __IEcreateElement(tagName);
    
    element.getAttribute=interface.getAttribute;
    element.setAttribute=interface.setAttribute;
    
    return element;
}
estendiamo la createElement in maniera da supportare gli standard.
ora tutti i nodi creati a runtime avranno un comportamento standard,
manca pero' il supporto per i nodi presenti nell'HTML,aggiungiamoglielo.
codice:
var interface = new Element;
onload=function(){
	var list=document.all;
	var max=list.length;
	
	while(--max)
	{
		list[max].getAttribute=interface.getAttribute;
		list[max].setAttribute=interface.setAttribute;
		
	}
	//HTML node
	list[0].getAttribute=interface.getAttribute;
	list[0].setAttribute=interface.setAttribute;
}

ora abbiamo il supporto completo w3c, o almeno piu attinente allo standard

non funziona sui nodi creati con innerHTML/outerHTML, si puo estendere innerHTML cosi' come e' stato fatto ma non e' mia intenzione poiche innerHTML non e' standard

c'e' un altro modo di fare l'ultimo step(aggiungere il supporto ai nodi già creati dall'HTML ),
usare un file HTC come viene fatto QUI