11550 sujets

JavaScript, DOM et API Web HTML5

Pages :
(reprise du message précédent)

yodaswii a écrit :
Tout d'accord sauf pour class Smiley smile . En l'absence d'un mécanisme comme celui offert par HTML 5, l'attribut class est tout à fait pertinent pour mettre en place des scripts clients (simili typage et possibilité d'affecter plusieurs valeurs de classes). Je ne vois pas ça comme un détournement (pourquoi plus un passage par l'identifiant que par la classe !?).

J'ai déjà vu des scripts qui stockaient des valeurs arbitraires dans element.className. Genre des chaines de texte ou des URL.

Utiliser class pour déclarer un groupe logique d'éléments sous un même nom n'est bien sûr pas un abus... vu que l'attribut est fait pour ça (cf. la spec HTML 4.01).

yodaswii a écrit :
En attendant les attributs data- et API JS correspondante.

Les attributs data- sont utilisables dans tous les navigateurs actuels sans souci particulier. Si le navigateur ne les implémente pas spécifiquement, on n'aura pas accès à element.dataset.lol mais on peut tout à fait utiliser element.getAttribute('data-lol').
fvsch a écrit :
J'ai déjà vu des scripts qui stockaient des valeurs arbitraires dans element.className. Genre des chaines de texte ou des URL.


Ok, cette fois-ci je te suis Smiley cligne .

fvsch a écrit :
Les attributs data- sont utilisables dans tous les navigateurs actuels sans souci particulier. Si le navigateur ne les implémente pas spécifiquement, on n'aura pas accès à element.dataset.lol mais on peut tout à fait utiliser element.getAttribute('data-lol').


En effet, tout dépend de l'attachement du développeur à la validité de son code (sens DTD ; même via DOM ça peut déstabiliser certains Smiley ravi ).
Modifié par yodaswii (15 Mar 2011 - 11:59)
Je ne suis pas sur d'avoir bien compris ces derniers echanges...

Peut on utiliser un attribut data dans n'importe quel element tout en conservant un code HTML valide en xHTML (ce que j'utilise en ce moment) ???

Peut on utiliser class pour affecter un comportement à plusieurs elements ? (ca j'ai cru comprendre que l'on pouvait dans la mesure ou c'est pas un grenier à n'importe quoi...)

Merci de vos éclaircissement.
tepaze a écrit :
Peut on utiliser un attribut data dans n'importe quel element tout en conservant un code HTML valide en xHTML (ce que j'utilise en ce moment) ???


Si directement dans le code source HTML (code sans modification via JS) : non.
Si ajouter en JS : oui pour le code source HTML mais non pour le code généré (modification via JS).

Ce deuxième point est possible ; je ne sais pas exactement les impacts que cela peut avoir au-delà de l'invalidité. Personnellement, je ne le ferai pas mais ça ne regarde que moi Smiley cligne .

tepaze a écrit :
Peut on utiliser class pour affecter un comportement à plusieurs elements ? (ca j'ai cru comprendre que l'on pouvait dans la mesure ou c'est pas un grenier à n'importe quoi...)


Exact. Exemple :
<div class="typeobjet1 typeobjet2 typeobjet3"></div>


Et en JS pour récupérer les valeurs de class (la variable div correspond à l'élément cité précédemment ; prévoir des vérifications ceci dit) :
var classValues = div.getAttribute('class').split(' ');


Après avoir détecté la valeur souhaitée, on pourra attacher les événements correspondants à l'élément Smiley smile .
Modifié par yodaswii (16 Mar 2011 - 15:56)
Mouais....

Merci pour ta reponse yodaswii. C'est bien ce que je pensais.

En fait l'interet d'un code valide c'est le referencement si j'ai bien tout compris. Plus un code comporte d'erreur, moins bien il est referencé.

Donc je ferais aussi sans les data, dans la mesure du possible...

Du coup je viendrais peut etre plus souvent poser des questions sur le forum afin de trouver des solutions propres Smiley ravi

Bien cordialement à tous, et toutes.
tepaze a écrit :
En fait l'interet d'un code valide c'est le referencement si j'ai bien tout compris. Plus un code comporte d'erreur, moins bien il est referencé.


Sans être référenceur et expert SEO, je répondrai par la négative.

La seule problématique est utilisateur : est-il en mesure d'utiliser ce qui lui est proposé ?
Les attributs data- n'ont peut-être pas d'incidence mais pour moi on manque encore de recul.
yodaswii a écrit :
Les attributs data- n'ont peut-être pas d'incidence mais pour moi on manque encore de recul.

L'ajout du mécanisme d'attributs custom dans HTML5 résulte justement d'un recul de plus de dix ans sur l'utilisation d'attributs personnalisés. À savoir que:
- Ça marche depuis longtemps (tu peux faire un element.setAttribute('nom-arbitraire', 'Ma valeur') par exemple).
- Il y avait des risques de collision entre attributs custom et fonctionnalités futures de HTML, ce que le préfixe data- corrige.
fvsch a écrit :
L'ajout du mécanisme d'attributs custom dans HTML5 résulte justement d'un recul de plus de dix ans sur l'utilisation d'attributs personnalisés.


Par le "on", c'était nous développeurs front-end et apparentés Smiley smile .

fvsch a écrit :
- Ça marche depuis longtemps (tu peux faire un element.setAttribute('nom-arbitraire', 'Ma valeur') par exemple).
- Il y avait des risques de collision entre attributs custom et fonctionnalités futures de HTML, ce que le préfixe data- corrige.


D'accord. Donc utilisable ; seule l'invalidité du code est impliqué (ce qui reste maîtrisable en l'état). Merci pour ce complément.
Modifié par yodaswii (18 Mar 2011 - 15:33)
> fvsch

OK, donc l'attribut data est acceptable du moment ou il est manipulé en javascript.
fvsch a écrit :

J'ai déjà vu des scripts qui stockaient des valeurs arbitraires dans element.className. Genre des chaines de texte ou des URL.

Utiliser class pour déclarer un groupe logique d'éléments sous un même nom n'est bien sûr pas un abus... vu que l'attribut est fait pour ça (cf. la spec HTML 4.01).


Je n'irai pas jusqu'à dire que j'approuve ces pratiques qui sont bine "crades", mais par contre tu cite la spec HTML4 pour appuyer tes propos alors que celle-ci te donne tort !

a écrit :
The class attribute, on the other hand, assigns one or more class names to an element; the element may be said to belong to these classes. A class name may be shared by several element instances. The class attribute has several roles in HTML:
As a style sheet selector (when an author wishes to assign style information to a set of elements).
For general purpose processing by user agents.


Donc stocker des valeurs diverses et variées dans l'attribut class n'est nullement un usage abusif de l'attribut. La spec le dit noir sur blanc "general purpose processing".

Sinon pour en revenir au problème de base, l'utilisation de class est la meilleure solution, faire des getElementById en séquence n'est vraiment pas très propre, ni lisible, ni performant.
Bonjour,

Je remonte le sujet car j'ai vu une solution qui permet d'avoir un code xHTML valide, tout en stockant un nombre important de donnees si desiré.

C'est en utilisant les namespace...

ex :
<div xmlns:data="a:1,z:2....">
</div>


Personnellement, je trouve ca pas mal du tout... Y voyez vous des contre indications ?
tepaze a écrit :
Bonjour,

Je remonte le sujet car j'ai vu une solution qui permet d'avoir un code xHTML valide, tout en stockant un nombre important de donnees si desiré.

C'est en utilisant les namespace...

ex :
&lt;div xmlns:data=&quot;a:1,z:2....&quot;&gt;
&lt;/div&gt;


Personnellement, je trouve ca pas mal du tout... Y voyez vous des contre indications ?


Je l'ai déjà fait dans le passé, c'est parfaitement jouable.
Mais pour que cela ait du sens il faut que ton site soit RÉELLEMENT en XHTML, c'est à dire avec un prologue xml et le bon mime/type.

Ce la induit deux choses :
- pas de compatibilité IE, sauf les versions récentes. Et par pas de compatibilité, je veux dire pas du tout d'affichage, zéro, rien nada
- à la moindre erreur, pas d'affichage du tout

Après cela a aussi pas mal d'avantages :
- assurance d'avoir un balisage propre (tu as pas trop le choix)
- compatibilité avec pas mal de technologies intéressantes XSLT et cie

Mon avis : pour un outil spécialisé (application Air, intranet, etc) oui, pour du web c'est un mauvais choix.
Ah m....e !!! J'avais oublié ca !!!

Bon, ya plus qu'a construire un "BDD" javascript si je comprend bien...

Merci
Pages :