106 votes

Existe-t-il un bon moyen d'attacher des objets JavaScript à des éléments HTML ?

Je veux associer un objet JavaScript à un élément HTML. Existe-t-il un moyen simple de le faire ?

J'ai remarqué HTML DOM définit une méthode setAttribute et il semble que celle-ci soit définie pour un nom d'attribut arbitraire. Cependant, elle ne peut définir que des valeurs de type chaîne. (Vous pouvez bien sûr utiliser cette méthode pour stocker des clés dans un dictionnaire).

Spécificités (bien que je sois surtout intéressé par la question générale) :

Plus précisément, j'ai des éléments HTML représentant des nœuds dans une arborescence et j'essaie d'activer le glisser-déposer, mais l'événement de dépôt de jQuery ne me donne que les éléments qui sont glissés et déposés.

Le modèle normal pour obtenir des informations pour les gestionnaires d'événements semble être de créer les éléments HTML en même temps que vous créez les objets JavaScript et ensuite de définir les gestionnaires d'événements en fermant sur ces objets JavaScript - cependant, cela ne fonctionne pas très bien dans ce cas (je pourrais avoir un objet global qui est rempli quand un drag commence... mais cela semble un peu désagréable).

129voto

bobince Points 270740

Les objets JavaScript peuvent se voir attribuer des propriétés arbitraires, il n'y a rien de particulier à faire pour l'autoriser. Cela inclut les éléments DOM ; bien que ce comportement ne fasse pas partie de la norme DOM, il existe depuis les toutes premières versions de JavaScript et est totalement fiable.

var div= document.getElementById('nav');
div.potato= ['lemons', 3];

6 votes

@tat.wright - Les propriétés arbitraires sur les éléments HTML dont il parle sont appelées propriétés Expando. Notez également que div.potato ne signifie pas div.getAttribute("potato").

2 votes

Il n'est pas du tout fiable. Par exemple, un appel à document.expando = false dans IE empêche toutes les propriétés expando sur les éléments HTML dans le document.

39 votes

@Tim Down : alors ne le faites pas. Je ne vois pas pourquoi ce n'est pas fiable - c'est comme dire que l'objet String n'est pas fiable, parce que vous pouvez le mettre à null.

44voto

Phil.Wheeler Points 9968

Avez-vous regardé le jQuery data() méthode ? Vous pouvez affecter des objets complexes à l'élément si vous le souhaitez ou vous pouvez exploiter cette méthode pour contenir une référence à un objet (ou à d'autres données), à tout le moins.

8 votes

Merci : C'est à peu près ce que je cherchais. Fait intéressant pour définir cette méthode, jquery stocke les clés dans un dictionnaire global dans un attribut de chaîne sur chaque élément. Le nom de cet attribut de chaîne est généré de manière aléatoire lorsque jquery est chargé pour la première fois. (Suggérant qu'il n'y a pas une bonne façon de faire il n'y a pas une façon plus agréable de faire ceci seulement en utilisant le DOM)

6 votes

Il convient de noter que la fonction de jQuery data() travaux en utilisant le réponse donnée par Bobince donc si vous n'utilisez pas déjà jquery, vous pouvez tout aussi bien l'utiliser.

6 votes

C'est drôle comme je peux regarder cette réponse 6 ans plus tard et penser "c'est une réponse très sous-optimale. @bobince devrait avoir la réponse acceptée".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X