setAttribute - Patch pour internet explorer - Javascript
Edit juin2012: ajout de l'attribut html "for" dans la fonction.
Internet explorer interprète mal ou pas du tout la function setAttribute. Ci dessous mon prototype à insérer en début de script pour patcher ce navigateur. Il manque surement des cas particuliers que je n'ai pas pris en compte, il suffira de rajouter des "case" dans ce prototype.
if(navigator.appName == 'Microsoft Internet Explorer'){ //patch pour IE Element.prototype.setAttribute = function(attribut,valeur){ switch(attribut) { case "onClick": case "onMouseOut": case "onMouseOver": eval('this.' + attribut.toLowerCase() + '=function(){' + valeur +'}'); return; break; /* *EDIT * Meme De cette manière le changement de type ne fonctionne pas sous IE9 * Il ne veut pas prendre le parentNode de l'objet prototypé. * Du coup la function this.parentNode.replaceChild génére une erreur * Il vaut mieux se passer de changer le type d'un input. * setAttribute("type".... fonctionne quand même * pour un objet dont le type n'a pas encore été défini. case "type": //detruire entierement pour le refaire var newObject = document.createElement(this.tagName); newObject.type = valeur; if(this.size) newObject.size = this.size; if(this.value) newObject.value = this.value; if(this.name) newObject.name = this.name; if(this.id) newObject.id = this.id; if(this.className) newObject.className = this.className; this.parentNode.replaceChild(newObject,this); return; break; */ case "class": var correctAttribut="className"; break; case "for": var correctAttribut="htmlFor"; break; default: var correctAttribut=attribut; break; } eval('this.' + correctAttribut + '="' + valeur +'"'); } }
Voila, avec ça, je vais corriger mon sélecteur de dates pour qu'il marche avec IE
Commentaires
Question subsidiaire : tu parles de quelles versions d'IE ?
C'était nécessaire sur les versions 8 et 9 d'internet explorer.
Je n'ai pas testé sur les versions précédentes.