Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/03/2011, 09h34   #1
Membre habitué
 
Inscription : juillet 2008
Messages : 120
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 120
Points : 127
Points : 127
Par défaut Stocker un attribut (ou une propriété) arbitraire à un noeud du dom

Bonjour,

Je souhaite , sur une page que je génère dynamiquement, passer des variables à des noeuds du DOM, afin de pouvoir travailler dessus en js.

Conceptuellement, je souhaite avoir une page html contenant par exemple :
Code html :
1
2
 
<div id="myDiv" myValue="hello world">...</div>

Toutefois, je suppose que générer un tel code html n'est pas très propre (en particulier, je dois violer allègrement ma dtd) ; et je n'ai aucune certitude quant à la portabilité de cette solution.

Aussi, ma question est : quelle est la manière canonique de
- passer de telles valeurs lors de la génération dynamique de ma page
- lire / réécrire ces valeurs, en js, durant la durée de vie de ma page ?

(À titre indicatif : je souhaite, pour ma culture, savoir comment le faire en js "pur", mais puisque j'utilise mootools, des réponses utilisant ce framework me satisferont également)

Je vous remercie par avance.
_ash_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 11h34   #2
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
disons que tu peux affecter une propriété arbitraire à un objet dom par simple déclaration;

Code :
mon_objet.myValue="Hello World";
ce qui ne déclenchera pas une apocalypse au niveau du dom;
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 12h15   #3
Membre habitué
 
Inscription : juillet 2008
Messages : 120
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 120
Points : 127
Points : 127
Merci pour cette réponse. En faisant ainsi, je peux associer des variables à des noeuds du dom durant la vie de la page.

En revanche, m'est-il possible de faire en sorte d'avoir ces variables dès le départ (ie : avant que le js s'exécute), ou alors dois-je obligatoirement ajouter une couche de js d'initialisation pour setter ces valeurs ?
_ash_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 12h39   #4
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
malheureusement tous les navigateurs ne reconnaissent pas les propriétés exotiques au démarrage.
Il te faudra en effet ajouter une couche d'initialisation su le onload de la page.

Certains ne sont pas firands de cette methode de surcharge de propriétés des objets.
Jquery utilise un data() qui permet de stocker des données au niveau de l'objet sans modifier le DOM
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 12h45   #5
Membre habitué
 
Inscription : juillet 2008
Messages : 120
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 120
Points : 127
Points : 127
Je vous remercie pour ces réponses, qui m'aident à y voir plus clair.
Je vais pouvoir adapter mon code en conséquence.
_ash_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 13h47   #6
Membre expérimenté
 
Duke Jikel
Inscription : mai 2010
Messages : 340
Détails du profil
Informations personnelles :
Nom : Duke Jikel

Informations forums :
Inscription : mai 2010
Messages : 340
Points : 548
Points : 548
Citation:
Envoyé par SpaceFrog Voir le message
malheureusement tous les navigateurs ne reconnaissent pas les propriétés exotiques au démarrage.
FAUX :
element.getAttribute('monattribut');
fontionnera PARTOUT.
Citation:
Envoyé par SpaceFrog Voir le message
Il te faudra en effet ajouter une couche d'initialisation su le onload de la page.
Inutile, et rajoute plus de taf que nécessaire
Citation:
Envoyé par SpaceFrog Voir le message
Certains ne sont pas firands de cette methode de surcharge de propriétés des objets.
Oui, car les DTD sont là pour justement spécifier le HTML, mais au final un attribut exotique c'est n'est pas la mort.
Citation:
Envoyé par SpaceFrog Voir le message
Jquery utilise un data() qui permet de stocker des données au niveau de l'objet sans modifier le DOM
Voila une solution
dukej est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 12/03/2011, 15h02   #7
Membre habitué
 
Inscription : juillet 2008
Messages : 120
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 120
Points : 127
Points : 127
Merci pour ces précisions !
_ash_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 17h35   #8
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
Code :
1
2
element.getAttribute('monattribut');
fontionnera PARTOUT.
ha ben celui là je ne l'utilise jamais ...


En fait comme je code valide w3c en strict, tout attribut exotique est rejeté dans le html au départ. si par hasard j'ai besoin dans un contexte sans lib d'avoir un attribut sur un objet ce qui n'est en effet pas la mort, je l'attribues dans un init.
Sinon j'utilise le data de jquery
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 21h16   #9
Membre expérimenté
 
Duke Jikel
Inscription : mai 2010
Messages : 340
Détails du profil
Informations personnelles :
Nom : Duke Jikel

Informations forums :
Inscription : mai 2010
Messages : 340
Points : 548
Points : 548
Citation:
Envoyé par SpaceFrog Voir le message
Code :
1
2
element.getAttribute('monattribut');
fontionnera PARTOUT.
ha ben celui là je ne l'utilise jamais ...


En fait comme je code valide w3c en strict, tout attribut exotique est rejeté dans le html au départ. si par hasard j'ai besoin dans un contexte sans lib d'avoir un attribut sur un objet ce qui n'est en effet pas la mort, je l'attribues dans un init.
Sinon j'utilise le data de jquery
Il faut faire la différence entre un attribut HTML et une propriété DOM
l'attribut HTML, tu devras plutôt venir le récupérer par "getAttribute" que par un elm.attribut
dukej est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2011, 09h03   #10
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
Oui mais ayant pris pour habitude de code en valide strict, je ne me sers jamais des attributs html.
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 08h49   #11
Membre Expert
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 450
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 450
Points : 2 149
Points : 2 149
Citation:
Envoyé par SpaceFrog Voir le message
Oui mais ayant pris pour habitude de code en valide strict, je ne me sers jamais des attributs html.
Quel rapport avec le "strict" ? (c'est une vraie question, j'ai jamais vraiment codé en strict : c'est trop chiant ^_^)
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 08h53   #12
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
un validateur w3c te pointe une erreur si tu colles un attribut exotique dans une balise html. D'ou le fait que je n'en utilise jamais.
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 09h30   #13
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 419
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 419
Points : 2 806
Points : 2 806
Une petite précision sur les attributs et propriétés.

lorsque on utilise du code HTML comme
Code html :
<div id="myDiv" myValue="hello world">...</div>
l'interprète html génère un élément DOM div qui possède un attribut myDiv ayant la valeur "hello world"

lorsqu'on utilise
Code :
mon_objet.myValue="Hello World";
si un attribut myValue existe alors il est mis à jour sinon la propriété myValue est crée.

Certain navigateur acceptent plus ou moins bien les attributs non standard.
Le Document Type peut influer sur cette interprétation.
Le HTML Strict sera plus contraignant que transient.

mais il y a une fonction du DOM qu'on oublie un peu c'est le support des namespaces.
Code html :
1
2
3
4
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:perso="urn:fr.mydomain.myapp">
...
<div id="myDiv" perso:myValue="hello world">...</div>
l'urn à fournir pour le name space doit être unique (ce peut être une url)
en général on utilise un nom de domaine inversé.

ensuite les attributs son préfixé du nom du namespace.
ici "perso"
normalement on met ce que l'on veut
pour faire dans les règles on devrait dans les traitement chercher l'attribut xmlns:... ayant pour valeur son url pour déterminer ce préfixe.
souvent son se content d'utiliser directement ce qu'on à mis.

le déterminer dynamiquement permet de fournir une lib qui traitera ces attribut sans avoir à connaitre à l'avance ce que choisira le développeur.

ensuite dans le code le DOM fournis les méthodes getAttributeNS et setAttributeNS

voici un exemple
Code html :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:fast="urn:org.jquery.fast"
      fast:includePath="js/components/">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      <title>Demo org.jquery.fast.js</title>
      <script type="text/javascript" src="js/jquery-latest.js"></script>
      <script type="text/javascript" src="js/org.jquery.fast.js"></script>
      <link href="style.css" rel="stylesheet" type="text/css" />
   </head>
   <body>
    <form fast:class="AutoForm"><pre>
       <input type="text"    fast:checktype="nameOrNull" id="nom">
       <input type="text"    fast:checktype="email"      id="adresse">
       <input type="text"    fast:checktype="phone"      id="telephone">

la librairie js/org.jquery.fast.js va chercher le namespace don l'urn est urn:org.jquery.fast
puis elle va traiter tous les attributs du namespace
fast:includePath lui donne le chemin pour inclures les composants
fast:class lui indique qu'un tag doit être traité par le composant ...
fast:checktype attache une méthode de vérification

etc.

on reste ainsi conforme au W3C
reste un détail d'importance.
pour faire une validation du code HTML il faut écrire une DTD (je préfère les schémas xsd) qui inclus HTML et le Namespace.
ce n'est pas toujours simple.

A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h24.


 
 
 
 
Partenaires

Hébergement Web