Bonjour à tous,
Une technique bien utile pour ajouter des méthodes personnalisées à tous les éléments HTML d'un type donné est la suivante :
Par exemple avec HTMLInputElement, on ajoute la méthode à tous les <input>; avec HTMLTableCellElement à tous les <td>; etc. C'est surtout bien pratique pour ajouter la méthode à tous les éléments du type voulu, actuellement présents sur la page, ou créés ultérieurement, sans avoir à s'en soucier par la suite.
C'est notamment beaucoup plus pratique et performant que ce genre de code :
C'est moins bien pour deux raisons :
1 - IL faut penser à rajouter la méthode à chaque nouvel élément créé ultérieurement, ce n'est pas automatique
2 - Techniquement, ça fait une fermeture différente par élément existant, si on assigne la fonction directement de cette façon; pas sûr que les optimiseurs sont capables de déterminer que c'est la même fonction à chaque fois
3 - Sans doute conséquence du point 2, c'est un peu lent si on le fait sur un grand nombre d'éléments (notamment * !)
Pour le moment, concrètement, j'utilise ça pour ajouter des méthodes à HTMLInputElement, pour me simplifier la validation de formulaires.
Venons-en à ma question: sur quels navigateurs cette technique fonctionne, et sur lesquels elle ne fonctionne pas ?
J'ai cherché, et j'ai trouvé énormément de sites présentant des tableaux de compatibilité sur beaucoup d'API différentes, mais pas précisément ça !
Par exemple sur un site qui s'appelle quelque chose comme quirkmode.org et qui semble être und des plus complets en la matière (j'ai pas retenu le lien), on trouve facilement ce qu'on cherche pour DOM level 1 et 2, CSS 2.1 et 3, API HTML5 comme audio/video, canvas, etc.
Par contre pour ce que je cherche précisément aujourd'hui, je ne trouve pas...
Je vois que ça marche nickel sur IE9 et firefox 21. Pa rcontre je me rappelle très clairement qu'à l'époque d'IE6, ça ne marchait que sure firefox 1 et 2, et il fallait alors obligatoirement recourrir au second code que j'ai indiqué comme mauvais pour y arriver, ou alors utiliser des trucs propriétaires incompréhensibles comme les behavior d'IE5/6.
Qu'en est-il pour IE7, IE8, chrome et safari ?
Merci pour vos réponses, et désolé d'avoir posé cette question idiote si vous arrivez à me répondre en un seul lien...
P.S. Merci de ne pas me répondre quelque chose comme "ne t'emm**** pas et utilise JQuery"; ce n'est normalement pas le genre de la maison, mais autant prévenir vu que beaucoup de monde croit à tort que JQuery est le nouveau javascript alors que ce n'est ni plus ni moins qu'une bibliotèhque très populaire; et en l'occurence, je ne l'utilise pas.
Modifié par QuentinC (25 Jun 2013 - 20:53)
Une technique bien utile pour ajouter des méthodes personnalisées à tous les éléments HTML d'un type donné est la suivante :
HTMLXXXElement.prototype.mymethod = function () {
...
}
Par exemple avec HTMLInputElement, on ajoute la méthode à tous les <input>; avec HTMLTableCellElement à tous les <td>; etc. C'est surtout bien pratique pour ajouter la méthode à tous les éléments du type voulu, actuellement présents sur la page, ou créés ultérieurement, sans avoir à s'en soucier par la suite.
C'est notamment beaucoup plus pratique et performant que ce genre de code :
var array = document.getElementsByTagName('XXX');
for (var i=0; i<array.length; i++) {
array [ i ] = function () { ... };
}
C'est moins bien pour deux raisons :
1 - IL faut penser à rajouter la méthode à chaque nouvel élément créé ultérieurement, ce n'est pas automatique
2 - Techniquement, ça fait une fermeture différente par élément existant, si on assigne la fonction directement de cette façon; pas sûr que les optimiseurs sont capables de déterminer que c'est la même fonction à chaque fois
3 - Sans doute conséquence du point 2, c'est un peu lent si on le fait sur un grand nombre d'éléments (notamment * !)
Pour le moment, concrètement, j'utilise ça pour ajouter des méthodes à HTMLInputElement, pour me simplifier la validation de formulaires.
Venons-en à ma question: sur quels navigateurs cette technique fonctionne, et sur lesquels elle ne fonctionne pas ?
J'ai cherché, et j'ai trouvé énormément de sites présentant des tableaux de compatibilité sur beaucoup d'API différentes, mais pas précisément ça !
Par exemple sur un site qui s'appelle quelque chose comme quirkmode.org et qui semble être und des plus complets en la matière (j'ai pas retenu le lien), on trouve facilement ce qu'on cherche pour DOM level 1 et 2, CSS 2.1 et 3, API HTML5 comme audio/video, canvas, etc.
Par contre pour ce que je cherche précisément aujourd'hui, je ne trouve pas...
Je vois que ça marche nickel sur IE9 et firefox 21. Pa rcontre je me rappelle très clairement qu'à l'époque d'IE6, ça ne marchait que sure firefox 1 et 2, et il fallait alors obligatoirement recourrir au second code que j'ai indiqué comme mauvais pour y arriver, ou alors utiliser des trucs propriétaires incompréhensibles comme les behavior d'IE5/6.
Qu'en est-il pour IE7, IE8, chrome et safari ?
Merci pour vos réponses, et désolé d'avoir posé cette question idiote si vous arrivez à me répondre en un seul lien...
P.S. Merci de ne pas me répondre quelque chose comme "ne t'emm**** pas et utilise JQuery"; ce n'est normalement pas le genre de la maison, mais autant prévenir vu que beaucoup de monde croit à tort que JQuery est le nouveau javascript alors que ce n'est ni plus ni moins qu'une bibliotèhque très populaire; et en l'occurence, je ne l'utilise pas.
Modifié par QuentinC (25 Jun 2013 - 20:53)