65 votes

Puis-je ajouter des propriétés arbitraires aux objets DOM ?

Puis-je ajouter des propriétés arbitraires aux objets JavaScript DOM, telles que <INPUT> o <SELECT> éléments ? Ou, si je ne peux pas le faire, existe-t-il un moyen d'associer mes propres objets à des éléments de page via une propriété de référence ?

48voto

James Points 507

ECMAScript 6 dispose de WeakMap qui vous permet d'associer vos données privées à un élément DOM (ou tout autre objet) tant que cet objet existe.

const wm = new WeakMap();
el = document.getElementById("myelement");
wm.set(el, "my value");
console.log(wm.get(el)); // "my value"

Contrairement aux autres réponses, cette méthode garantit qu'il n'y aura jamais de conflit avec le nom d'une propriété ou d'une donnée.

32voto

Andy E Points 132925

Oui, vous pouvez ajouter vos propres propriétés aux objets DOM, mais n'oubliez pas de faire attention pour éviter les collisions de noms et les références circulaires.

document.getElementById("myElement").myProperty = "my value";

HTML5 a introduit un moyen valide d'attacher des données à des éléments par le biais du balisage - en utilisant la balise data- préfixe de l'attribut. Vous pouvez également utiliser cette méthode dans les documents HTML 4 sans problème, mais ils ne seront pas validés :

<div id="myElement" data-myproperty="my value"></div>

Vous pouvez y accéder via JavaScript en utilisant getAttribute() :

document.getElementById("myElement").getAttribute("data-myproperty");

27voto

meder Points 81864

Bien sûr, les gens le font depuis des lustres. Ce n'est pas recommandé car c'est salissant et vous risquez d'endommager les propriétés existantes.

Si vous faites tourner du code en boucle avec for..in votre code peut se casser parce que vous allez maintenant énumérer ces propriétés nouvellement attachées.

Je suggère d'utiliser quelque chose comme l'outil jQuery .data qui conserve les métadonnées attachées aux objets. Si vous ne voulez pas utiliser une bibliothèque, réimplémentez jQuery.data

0 votes

Cool... est data utilisé par jQuery lui-même ou suis-je libre de lui attribuer n'importe quelle valeur ?

1 votes

$.data est défini par jQuery. Vous pouvez l'utiliser comme suit $('#el').data('key', 'value') .

1 votes

C'est $(element).data('name', value) pour définir une valeur, et $(element).data('name') pour le lire.

7voto

Freyday Points 1002

Voulez-vous ajouter des propriétés à l'objet, ou des attributs à l'élément ?

Vous pouvez ajouter des attributs en utilisant setAttribute

var el = document.getElementById('myelement');
el.setAttribute('custom', 'value');

ou vous pouvez simplement ajouter des propriétés à l'objet javascript :

var el = document.getElementById('myelement');
el.myProperty = 'myValue';

0 votes

Si quelqu'un a oublié la différence entre propriété et attribut -> lien rapide stackoverflow.com/a/6004028

6voto

morris4 Points 1817

Au cas où quelqu'un se demanderait en 2015, oui, vous pouvez - y C'est ce que fait jQuery dans données . Choisissez simplement des noms à l'épreuve du temps, comme des préfixes de fournisseurs ou des suffixes aléatoires basés sur le temps (jQuery).

1 votes

Mais jQuery utilise un cache interne où les données sont enregistrées, les données ne sont pas enregistrées dans l'élément DOM lui-même. Voir aussi : stackoverflow.com/questions/7200722/jquery-expando-properties

1 votes

Vous avez lié à la branche principale de jQuery. Comme les branches maîtresses changent, veuillez envisager de créer un lien vers une version particulière.

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