Aller au contenu

Attributs et propriétés

Maîtriser JavaScript nécessite de comprendre comment il interagit avec le Document Object Model (DOM). Ce tutoriel couvre les attributs et propriétés du DOM, expliquant comment les lire, les modifier et les synchroniser pour manipuler dynamiquement les pages web.

Introduction au DOM en JavaScript

Le DOM représente une page web sous forme d'un arbre hiérarchique d'objets, permettant à des langages de programmation comme JavaScript d'interagir avec le contenu, le style et la structure de la page. Chaque élément du document HTML est mappé comme un objet dans le DOM, et ces objets possèdent des propriétés et des attributs qui peuvent être manipulés à l'aide de JavaScript.

Différences entre attributs et propriétés

Bien que les termes « attributs » et « propriétés » soient souvent utilisés de manière interchangeable, ils ont des significations distinctes dans le contexte du DOM :

  • Attributs : Ils sont définis dans le code HTML. Ils fournissent des informations supplémentaires sur les éléments HTML. Les attributs sont toujours des chaînes de caractères et s'accèdent à l'aide de méthodes comme getAttribute() et setAttribute().
  • Propriétés : Ce sont les caractéristiques des objets DOM qui représentent les éléments HTML. Les propriétés peuvent être de n'importe quel type de données, tel que booléen, chaîne ou nombre, et s'accèdent directement via la notation pointée.

Note sur la synchronisation : Pour certains attributs (comme class, id, value et checked), les modifications de l'attribut mettent automatiquement à jour la propriété correspondante, et vice versa. Cependant, cette synchronisation bidirectionnelle n'est pas garantie pour tous les attributs.

Exemple de code : Accès aux attributs et propriétés


html
<div id="demo" class="sample" data-level="1">Hello, World!</div>
<br />
<div>first getAttributes result (data-level): <span id="1"></span></div>
<div>className property: <span id="2"></span></div>
<script>
  const demoElement = document.getElementById("demo");
  const span1 = document.getElementById("1");
  const span2 = document.getElementById("2");

  // Accessing an attribute
  let classAttribute = demoElement.getAttribute("data-level");  // Output: "1"
  span1.innerHTML = classAttribute;
  
  // Accessing a property
  // Note: 'class' is a reserved keyword in JS, so the property is named 'className'
  const classNameProperty = demoElement.className;  // Output: "sample"
  span2.innerHTML = classNameProperty;
</script>

Result

Manipulation des éléments du DOM

Comprendre comment manipuler les éléments du DOM est crucial pour le développement web dynamique. JavaScript propose plusieurs méthodes pour interagir avec les attributs et les propriétés.

Affectation des attributs

Utilisez la méthode setAttribute() pour ajouter un nouvel attribut ou modifier la valeur d'un attribut existant sur un élément HTML.

Exemple de code : Affectation des attributs


html
<div id="demo" class="sample">Hello, World!</div>
<br />
<div>className property after change: <span id="span1"></span></div>
<script>
  const demoElement = document.getElementById("demo");
  const span1 = document.getElementById("span1");
  
  // Changing the attribute
  demoElement.setAttribute("class", "changed");
  // The property updates automatically due to attribute-property synchronization
  span1.innerHTML = demoElement.className;
</script>

Result

Cet extrait de code modifie l'attribut class de l'élément div en « changed ».

Suppression des attributs

Pour supprimer complètement un attribut d'un élément HTML, utilisez la méthode removeAttribute(). Cette opération est utile lorsque vous souhaitez retirer d'un élément un comportement ou un style spécifique défini par un attribut.

Exemple :demoElement.removeAttribute("class");

Réaffectation des propriétés

Les propriétés des éléments du DOM peuvent être facilement réaffectées directement à l'aide de la notation pointée, ce qui permet une manipulation plus flexible des caractéristiques de l'élément.

Exemple de code : Modification des propriétés


html
<div id="demo" class="sample">Hello, World!</div>
<br />
<div>className property after change: <span id="span1"></span></div>
<script>
  const demoElement = document.getElementById("demo");
  const span1 = document.getElementById("span1");

  // Changing the property
  // Note: 'class' is a reserved keyword in JS, so the property is named 'className'
  demoElement.className = "changed";
  span1.innerHTML = demoElement.className;
</script>

Result

Cet exemple modifie la propriété className de l'élément div, illustrant comment les propriétés peuvent être utilisées pour contrôler dynamiquement les caractéristiques d'un élément.

Attributs de données personnalisés

Les développeurs peuvent également définir des attributs de données personnalisés préfixés par data-, ce qui est particulièrement utile pour stocker des informations supplémentaires qui n'ont aucune représentation visuelle.

Exemple de code : Attributs de données personnalisés


html
<div id="demo" data-author="Jane Doe" data-year="2022">Information Panel</div>
<br />
<div>author: <span id="1"></span></div>
<div>year: <span id="2"></span></div>
<script>
  const element = document.getElementById("demo");
  const span1 = document.getElementById("1");
  const span2 = document.getElementById("2");
  span1.innerHTML = element.dataset.author;
  span2.innerHTML = element.dataset.year;
</script>

Result

Conclusion

Comprendre et utiliser efficacement les attributs et propriétés du DOM peut considérablement améliorer vos compétences en tant que développeur JavaScript. En maîtrisant ces concepts, vous pourrez manipuler dynamiquement les éléments des pages web et créer des applications web plus riches et plus interactives. Ces connaissances sont essentielles pour tout développeur souhaitant évoluer dans le domaine du développement web.

Pratique

Quelles affirmations décrivent correctement les différences entre les attributs et les propriétés dans le DOM, comme expliqué dans le tutoriel JavaScript ?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.