venerdì, aprile 21, 2006

standardizzare setAttribute on IE

setAttribute lavora in maniera strana su IE,
fà quello che deve fare, ovvero cambiare dei valori di alcune proprietà,
ma essendo che vengono modificate le proprietà di un oggetto JScript,
alcune parole come class, for hanno un nome diverso..

dopo aver letto l'articolo su delete.me.uk
ho deciso di utilizzare il metodo ben spiegato per risolvere
i problemi su class,for e style e l'associazione di eventi on...

ho usato un commento condizionale, includendo il codice sotto riportato si ottiene un setAttribute piu' standard.

/*@cc_on
Element = function () {};

Element.prototype.getAttribute = function (attribute) {
if (attribute == "class") attribute = "className";
if (attribute == "for") attribute = "htmlFor";
if (attribute == "style") return this.style.cssText;
else return this[attribute];
}

Element.prototype.setAttribute = function (attribute, value) {
if (attribute == "class") attribute = "className";
if (attribute == "for") attribute = "htmlFor";
if (attribute == "style") this.style.cssText =value;
else
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;

}
}
@*/
naturalmente per aggiungere un evento nell'onload dovrete poi usare una funzione del genere:

function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof oldonload != 'function') {
window.onload = func;
}
else {
window.onload = function() {
oldonload();
func();
}
}
}
Posta un commento