par
Hubert Roksor » 18 févr. 2008, 00:04
Un document.write() ?
L'embêtant d'un document.write() (ou des appels d'appendChild, innerHTML, etc...) c'est que c'est relativement lent et ça force à mélanger HTML et Javascript. Ça interfère également avec le processus de validation du document.
Pour ma part, je pencherais sur l'ajout d'une classe à chaque élément qu'on souhaite masquer en JavaScript. En JavaScript, il suffirait de boucler chaque élément et d'ajouter le style display: none chaque fois qu'on trouve le nom de la classe cherchée.
Le principe est de faire
apparaître les éléments nécessitant Javascript, et dans ce cas il faudrait faire un "display:block" ou plutôt retirer la valeur de l'attribut "display" pour lui faire adopter sa valeur par défaut et ne pas interférer avec les éléments inline. Malheureusement, ça voudrait dire qu'il faut faire une boucle sur tous les éléments de la page, donc ça peut prendre un petit peu de temps. De plus, cette boucle ne pourrait être exécutée qu'une fois le DOM complètement chargé et probablement déjà au moins partiellement affiché. C'est pourquoi j'ai opté pour un script que l'on peut placer le plus haut possible dans le document, de façon à minimiser le nombre de repaint/reflow.
Je ne l'ai pas précisé, mais j'ai aussi essayé de modifier le CSS via l'interface DOM, mais c'est plus long à taper et comme toujours la gymnastique pour le faire fonctionner sous IE est très désagréable.
Pour l'heure, retirer ce stylesheet spécial par removeChild() semble est la solution la plus rapide et la plus simple, mais si vous avez d'autres idées n'hésitez pas !

[quote="Sékiltoyai"]Un document.write() ?[/quote]
L'embêtant d'un document.write() (ou des appels d'appendChild, innerHTML, etc...) c'est que c'est relativement lent et ça force à mélanger HTML et Javascript. Ça interfère également avec le processus de validation du document.
[quote="Victor BRITO"]Pour ma part, je pencherais sur l'ajout d'une classe à chaque élément qu'on souhaite masquer en JavaScript. En JavaScript, il suffirait de boucler chaque élément et d'ajouter le style display: none chaque fois qu'on trouve le nom de la classe cherchée.[/quote]
Le principe est de faire [i]apparaître[/i] les éléments nécessitant Javascript, et dans ce cas il faudrait faire un "display:block" ou plutôt retirer la valeur de l'attribut "display" pour lui faire adopter sa valeur par défaut et ne pas interférer avec les éléments inline. Malheureusement, ça voudrait dire qu'il faut faire une boucle sur tous les éléments de la page, donc ça peut prendre un petit peu de temps. De plus, cette boucle ne pourrait être exécutée qu'une fois le DOM complètement chargé et probablement déjà au moins partiellement affiché. C'est pourquoi j'ai opté pour un script que l'on peut placer le plus haut possible dans le document, de façon à minimiser le nombre de repaint/reflow.
Je ne l'ai pas précisé, mais j'ai aussi essayé de modifier le CSS via l'interface DOM, mais c'est plus long à taper et comme toujours la gymnastique pour le faire fonctionner sous IE est très désagréable.
Pour l'heure, retirer ce stylesheet spécial par removeChild() semble est la solution la plus rapide et la plus simple, mais si vous avez d'autres idées n'hésitez pas ! ;)