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.

  1. if(navigator.appName == 'Microsoft Internet Explorer'){
  2. //patch pour IE
  3. Element.prototype.setAttribute = function(attribut,valeur){
  4. switch(attribut)
  5. {
  6. case "onClick":
  7. case "onMouseOut":
  8. case "onMouseOver":
  9. eval('this.' + attribut.toLowerCase() + '=function(){' + valeur +'}');
  10. return;
  11. break;
  12. /*
  13. *EDIT
  14. * Meme De cette manière le changement de type ne fonctionne pas sous IE9
  15. * Il ne veut pas prendre le parentNode de l'objet prototypé.
  16. * Du coup la function this.parentNode.replaceChild génére une erreur
  17. * Il vaut mieux se passer de changer le type d'un input.
  18. * setAttribute("type".... fonctionne quand même
  19. * pour un objet dont le type n'a pas encore été défini.
  20. case "type":
  21. //detruire entierement pour le refaire
  22. var newObject = document.createElement(this.tagName);
  23. newObject.type = valeur;
  24. if(this.size) newObject.size = this.size;
  25. if(this.value) newObject.value = this.value;
  26. if(this.name) newObject.name = this.name;
  27. if(this.id) newObject.id = this.id;
  28. if(this.className) newObject.className = this.className;
  29. this.parentNode.replaceChild(newObject,this);
  30. return;
  31. break;
  32. */
  33. case "class":
  34. var correctAttribut="className";
  35. break;
  36. case "for":
  37. var correctAttribut="htmlFor";
  38. break;
  39. default:
  40. var correctAttribut=attribut;
  41. break;
  42. }
  43. eval('this.' + correctAttribut + '="' + valeur +'"');
  44. }
  45. }

Voila, avec ça, je vais corriger mon sélecteur de dates pour qu'il marche avec IE

Commentaires

1. Le jeudi, novembre 17 2011, 20:19 par zigazou

Question subsidiaire : tu parles de quelles versions d'IE ?

2. Le jeudi, novembre 17 2011, 21:14 par gnieark

C'était nécessaire sur les versions 8 et 9 d'internet explorer.

Je n'ai pas testé sur les versions précédentes.

Page top