11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour brumeux...

J'ai pris pour (mauvaise ?) habitude de faire préceder mes scripts utilisant getelementbyid d'un if(getelementbyid).

Je me rends compte maintenant que :

- à peu près tous mes scripts utilisent getelementbyid.
- à peu près toutes mes pages font appel à ces scripts
- le contenu de ces pages est sans grand intérêt sans ces scripts

ET que, par surcroit... je ne traite pas le cas if not !

C'est bête non ?

Alors je me demande quelle est la meilleure pratique en la matière. (Meilleure incluant à mes yeux légereté de programmation & efficacité & propreté...)

1/ Continuer comme cela
2/ Continuer comme cela & traiter systématiquement le cas if not
3/ Faire un gros coup de if getelementbyid et traiter le cas if not une bonne fois pour toute dans un onload de la page d'accueil du site et ne plus s'en soucier ensuite.

A votre avis ?
Modifié par aCOSwt (07 Nov 2006 - 09:46)
Salut,

Tout ça est une question de philosophie...

Pour ma part, j'ai tendance à penser qu'il est suffisant pour un script de fonctionner sur les navigateurs supportant le DOM, à condition bien sûr qu'il ne soit pas intrusif.

Je teste donc document.getElementById le plus tôt possible pour ne pas avoir à surcharger mon code avec ça (ce qui est proche de ta solution 3).
Merci Eldebaran

J'aime beaucoup les conseils qui rejoignent ce que je pense...
Cela réconforte les matins brumeux.

Bonne journée à toi.
Bonjour,
Personnellement, je tape 3.
Mais bon, de toute façon, au pire, si document.getElementById est utilisé et qu'il n'existe pas, il fait planter le script, et le résultat est le même que si tu avais testé : non exécution
aCOSwt a écrit :
Bonjour brumeux...

(...)
- le contenu de ces pages est sans grand intérêt sans ces scripts

(...)

A votre avis ?


Je ne vais me prononcer que sur ce point, car j'ai faim et il est l'heure de passer à table Smiley cligne J'ai peur de comprendre ce que tu sembles sous-entendre par cette phrase: est-ce à dire que tu ajoutes du contenu à tes pages grâce à JavaScript?

Il faut le limiter à des fonctionnalités supplémentaires (pour ne pas dire gadget, trop péjoratif), et s'assurer que quand JS est désactivé, aucune information n'est perdue sur ta page...
Modifié par Gilles (07 Nov 2006 - 12:09)
Bon appétit Gilles !

En fait c'est très bien que je réponde après ton déjeûner... je t'aurais... coupé l'appétît...

Oui ! tu as bien interprété mon sous-entendu. Le contenu le plus important de mes pages est construit dynamiquement par des JavaScripts.

Ton objection est légitime et pertinente mais je ne crée pas un site à vocation multimondiste... Il est juste destiné à faire plaisir à une trentaine de félés de la raquette qui se préoccupent plus de savoir quand il faut toper, slicer, couper, du revers ou du coup droit et de leur classement FFTT que de savoir comment et pourquoi (dé)sactiver les JavaScripts.

comme, qui plus est, c'est une page perso chez un hébergeur qui n'accepte ni php ni bases de données... alors... je me débrouille plus que je ne programme...

Bonne digestion quand même...
Modifié par aCOSwt (07 Nov 2006 - 13:10)
aCOSwt a écrit :


comme, qui plus est, c'est une page perso chez un hébergeur qui n'accepte ni php ni bases de données... alors... je me débrouille plus que je ne programme...



Oui mais, en quoi as tu réellement besoin de javascript pour présenter ton contenu ? En dehors du fait de te faire plaisir... Smiley cligne
clb56 a écrit :


Oui mais, en quoi as tu réellement besoin de javascript pour présenter ton contenu ? En dehors du fait de te faire plaisir... Smiley cligne


Je connaissais un clb56 sémiologue, je l'ai aperçu musicologue, il me restait à le découvrir psychologue...
... car...
Tu as raison ! J'aime beaucoup la mise en abyme. Même que j'ai un javascript qui écrit le javascript qui écrit l'html... Tout cela... OUI ! pour me faire plaisir.

Au départ il y a quand même un besoin. Comme je n'ai ni base de données ni php, toutes mes données sont dans un tableur. Ces données sont exportées par une macro dans un .js du style :

var news, events, notes, sumAGSE_A, sumAGSE_M;
IndivBase=new Array();
TopA=new Array();
TopM=new Array();
FlopA=new Array();
FlopM=new Array();
Warnings=new Array();
ResaTab=new Array();
CFranceTeam=new Array();
IndivBase[46]=new Array();
IndivBase[46][1]="M";
IndivBase[46][2]=3828;
...etc...


Ce .js arrive avec les pages html et mes javascripts travaillent dessus pour construire dynamiquement la page sur le poste client...

Bon... je sais... ce n'est pas... esthétique... mais... cela fonctionne...
Modifié par aCOSwt (07 Nov 2006 - 14:06)
Bonsoir, je rejoint clb56 une page qui a besoin de JavaScript pour afficher du contenu c'est franchement pas top ...

Mais pour répondre à ta question je ferais :


var $ = function(id){
if (document.getElementById)
    return document.getElementById(id);
else id (document.all) 
    return document.all[id]; 
else 
    /// ???
}


Les avantages sont multiple, déjà ca résoud ton problème Smiley lol ca réduit la taille des scripts (donc l'usure du clavier [;)]) et enfin ca améliore les perfs car le script est moin gros en mémoire (ok de peu)
Bonsoir,
CyrilCS a écrit :
Les avantages sont multiple, déjà ca résoud ton problème Smiley lol ca réduit la taille des scripts (donc l'usure du clavier [;)]) et enfin ca améliore les perfs car le script est moin gros en mémoire (ok de peu)
Euh oui, sauf qu'il faut faire ça pour toutes les fonctionnalités que tu utilises et qui ne sont pas implémentées sur les navigateurs obsolètes...
Modifié par Eldebaran (07 Nov 2006 - 23:41)
Eldebaran a écrit :
Bonsoir,Euh oui, sauf qu'il faut faire ça pour toutes les fonctionnalités que tu utilises et qui ne sont pas implémentées sur les navigateurs obsolètes...


C'est l'avantage des frameworks JavaScript tel que prototype, dojo, Yahoo! Library, Microsoft Ajax Library, ...

Mais un navigateur qui ne supporte pas le DOM risque de ne pas avoir d'équivalent pour beaucoup de fonctions JavaScript ... Smiley confus
Merci CyrilCS. Ta solution est savante.
J'ai éssayé "pour le sport"... et pour apprendre...
Mais je crois que je vais considérer ma préférence initiale validée :

Fire Un gros coup de if not dans le onload de la page and... forget !

Bonne journée